0

この質問はおそらく以前に何度も尋ねられたものですが、あまりにも多くの回答を見てきましたが、どうすればよいかわかりません。

私はリストボックスを持っています:

<listbox ItemSource="{Binding listitems}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <grid>
                <Textblock text="{Binding value1}">
                <Textblock text="{Binding value2}">
            </grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</listbox>

次のクラスのリストがあります。

List<Items> listitems = new List<Items>();
public class Items
{
    public string value1 { get; set; }
    public string value2 { get; set; }
}

時々、リストが更新されます (より多くの要素が追加されます)。リストボックスにリストが更新されたことを知らせ、それに応じて UI を更新したいと考えています。

この時点で、リストを手動でC#のリストボックスにバインドし、リストが変更されたら、リストボックスをクリアしてリストを再度追加しますが、これは望ましくありません。

リストボックスがどのように自動的に更新されるのだろうか?

4

3 に答える 3

0

generic の代わりに、UI の要素の更新を担当するインターフェイスを内部的に実装するObservableCollectionList<T>を使用します。INotifyCollectionChanged

ObservableCollection<Items> listitems = new ObservableCollection<Items>();

編集

ListItems は である必要がありますproperty。フィールドでバインドすることはできません-

ObservableCollection<Items> listitems = new ObservableCollection<Items>();
public ObservableCollection<Items> Listitems
{
   get
   {
      return listitems;
   }
   set
   {
      listItems = value;
   }
}

XAML -

<Listbox ItemSource="{Binding Listitems}">
于 2013-06-02T13:02:42.250 に答える
0

リストを使用している場合は、INotifypropertyChanged を使用して通知する必要があります。それ以外の場合は、ObservableCollection を使用できます。

NotifyOnSourceUpdated=True も使用する必要があります。

于 2013-06-02T13:44:11.350 に答える
0

to を変更ListObservableCollection、MVVM パターンに従ってすべてを実装する必要があります。

public ObservableCollection<Items> Listitems 
{
    get { return _listitems ; }
    set
    {
        _listitems  = value;
        RaisePropertyChanged(() => Listitems );
    }
}

の各プロパティに対して同じことを行う必要がありますItems。製本にもプリズムを使用。このような多くの素晴らしいチュートリアルをオンラインで見つけることができます

于 2013-06-02T13:07:38.737 に答える