私は ListBox を持っていItemsSource
ますList<Control>
。
しかし、このリストの新しいコントロールを削除または追加すると、毎回 ListBox ItemsSource をリセットする必要があります
ListBox同期リストコンテンツの方法はありますか?
を使用する代わりに、 を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 を介してそれらを実行する必要があります。