0

私は ListBox を持っていItemsSourceますList<Control>

しかし、このリストの新しいコントロールを削除または追加すると、毎回 ListBox ItemsSource をリセットする必要があります

ListBox同期リストコンテンツの方法はありますか?

4

3 に答える 3

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; } }
于 2013-06-30T01:09:56.607 に答える
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));
            }
        }
    }

これにより、項目が L​​istBox に表示されます。この例では、コレクションに ListBox と TextBox が含まれています。コレクションに追加/削除して、目的の動作を取得できます。コントロール自体は、ビジュアルを設定する有意義な方法がないため、ListBox アイテムほど優れているわけではありません。そのため、おそらく IValueConverter を介してそれらを実行する必要があります。

于 2013-06-30T01:18:49.437 に答える