更改List <t> </t>时更新自动ListBox项

时间:2013-06-30 00:54:16

标签: c# wpf list

我有一个ListBox,我用ItemsSource填充List<Control>

但是当我删除或添加此List的新控件时,我每次都需要重置ListBox ItemsSource

有ListBox同步列表内容的任何方法吗?

3 个答案:

答案 0 :(得分:2)

不使用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; } }

答案 1 :(得分:2)

在你的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运行它们。

答案 2 :(得分:0)

在viewmodel中实现INotifyPropertyChanged接口。 在此List的setter中发布,调用NotifyPropertyChanged事件。这将 导致在UI上更新您的更改