Update automatic ListBox items when alter List<T>

本文关键字:lt gt List alter automatic ListBox items when Update | 更新日期: 2023-09-27 18:20:21

我有一个ListBox,我用ItemsSourceList<Control>填充它。

但是,当我删除或添加此列表的新控件时,我需要每次重置我的ListBox项目源

有没有ListBox同步列表内容的方法?

Update automatic ListBox items when alter List<T>

不要使用List<T>,而是使用ObservableCollection<T>。这是一个支持WPF:更改通知的列表

// if this isn't readonly, you need to implement INotifyPropertyChanged, and raise
// PropertyChanged when you set the property to a new instance
private readonly ObservableCollection<Control> items = 
    new ObservableCollection<Control>();
public IList<Control> Items { get { return items; } }

在您的Xaml中,使用这样的东西。。。

<ListBox ItemsSource="{Binding MyItemsSource}"/>

然后像这样把它连接起来。。。

public class ViewModel:INotifyPropertyChanged
    {
        public ObservableCollection<Control> MyItemsSource { get; set; }
        public ViewModel()
        {
            MyItemsSource = new ObservableCollection<Control> {new ListBox(), new TextBox()};
        }
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string name)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
        }
    }

这将把项目显示在ListBox中。在这里的示例中,集合包含一个ListBox和一个TextBox。您可以从集合中添加/删除,并获得您想要的行为。控件本身并不像ListBox项那么好,因为它们没有一种有意义的方式来填充可视化。因此,您可能需要通过IValueConverter来运行它们。

在视图模型中实现INotifyPropertyChanged接口。张贴在这个列表的setter中,调用NotifyPropertyChanged事件。这将导致在UI 上更新您的更改