我有一个ListBox,我用ItemsSource
填充List<Control>
。
但是当我删除或添加此List的新控件时,我每次都需要重置ListBox ItemsSource
有ListBox同步列表内容的任何方法吗?
答案 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上更新您的更改