0

私はWPF DataGridを使用してAnimal、アプリケーションの存続期間中に保存するクラスなどのインスタンスのリストを表示したいと考えています(たとえば、リストに動物を追加/削除します)。

public List<Animal> _animals
public class Animal {
    public int ID { get; set; }
    public strng name { get; set; }
}

DataGridそのようにXAMLに追加しました

<DataGrid Name="AnimalGrid"></DataGrid>

LoadAnimals()次に、ウィンドウを初期化するときに関数にリンクしました:

AnimalGrid.ItemsSource = LoadAnimals();
public List<Animal> LoadAnimals() {
    return _animals;
}

データ グリッドを更新/リフレッシュします。LoadAnimalより正確には、データ グリッドが関数を再度呼び出すことだけを望んでいます。試してみAnimalGrid.Items.Refresh()ましたが、うまくいきません。

助言がありますか ?

4

2 に答える 2

2

WPF バインディングは魔法だけでは機能しません。コードは、データ グリッドが更新されるように適切なイベントを発行する必要があります。

コレクションの変更 (追加/削除) に応じて更新するには、コレクションが変更されたときにデータ グリッドを更新するための適切なイベントを発生させるとして使用ObservableCollection<Animal>します。ItemsSource

個々の行のおよびプロパティの変更にグリッドが応答するようにする場合は、クラスINotifyPropertyChangedにも実装する必要があります。AnimalIDname

また、LoadAnimals()関数は null をチェックし、その場合は null を返すだけなので、何もしていないようです。+1 MVVM に関するコメントです。長期的にItemsSourceは、コード ビハインドで設定するのではなく、クラス (ビュー モデル) 内のプロパティにバインドする方がよいでしょう。

于 2013-01-25T17:16:18.153 に答える
0

コレクションから要素を削除するだけの場合。次に、 ObservableCollectionを使用できます

新しいコレクションを作成したい場合、またはコレクション内のオブジェクトのプロパティを更新したい場合。INotifyPropertyChanged を実装します。

于 2013-01-25T17:16:59.730 に答える