1

ビュー モデル のにDataGridバインドされた WPF Toolkit があります。にはイベントがあり、その 2 つの文字列プロパティのそれぞれのセッターがイベントを発生させます。また、タイプ のビュー モデルのプロパティにバインドされたグリッドのプロパティもあり、 とも呼ばれます。ObservableCollectionCarCarPropertyChangedSelectedItemCarSelectedItem

グリッドと同じウィンドウにadd、と のボタンがmodifyありdeleteます。 プロパティごとに 1 つずつ、2 つのテキスト ボックスを含むダイアログ ウィンドウを開きAddます。 確認ダイアログを表示してから削除します。modifyCarDelete

addとについてdelete、アイテムを に追加または削除するObservableCollectionと、グリッドは期待どおりに更新されます。しかし、modifyそうではありません。最初Carは使用しませんでしたがPropertyChanged、いくつかの検索の後、個々のアイテムのプロパティが変更されたときにグリッドを更新する必要があることがわかりました。しかし、今は を使用してPropertyChangedいますが、グリッドはまだ更新されません。

SelectedItemコレクションのアイテムを直接変更するだけでなく、ビューモデルの値を変更しようとしました。

私は何を間違っていますか?

4

2 に答える 2

1

PropertyChanged イベントを発生させるだけでなく、INotifyPropertyChanged を実装していることを確認してください。また、PropertyChanged を発生させるときは、送信者として「this」を渡す必要があります。そうしないと、WPF はイベントを無視します。

以下は、INotifyPropertyChanged を実装する単純な基本クラスです。

public class Person : INotifyPropertyChanged {

    private string name;

    public string Name {
        get { return name; }
        set { 
            if (name != value) {
                name = value;
                OnPropertyChanged("Name");
            }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName) {
        var handler = PropertyChanged;
        if (handler != null) {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

}
于 2009-11-25T05:27:57.113 に答える
0

ObservableCollection の典型的な問題のように思えます。ObservableCollection は、それ自体で追加、削除などを通知するだけです。保存したもののプロパティへの変更は通知されません。これが、追加/削除操作が期待どおりに機能する理由です。

あなたがすべきことは、 CollectionView を使用してそれにバインドすることです:

ObservableCollection<MyObject> myCollection = new ObservableCollection<MyObject>();    
ICollectionView view = CollectionViewSource.GetDefaultView(myCollection);

この方法を使用すると、グループ化と並べ替えがビューに組み込まれているという利点もあります。

于 2009-11-25T05:20:15.490 に答える