簡體   English   中英

WPF - 集合中屬性的OnPropertyChanged

[英]WPF - OnPropertyChanged for a property within a collection

在視圖模型中,我有一組名為“ClassA”的項目,稱為“MyCollection”。 ClassA有一個名為“IsEnabled”的屬性。

class MyViewModel 
{
    List<ClassA> MyCollection { get; set; }

    class ClassA { public bool IsEnabled { get; set; } }
}

我的視圖有一個綁定到MyCollection的數據網格。 每行都有一個按鈕,其“IsEnabled”屬性綁定到ClassA的IsEnabled屬性。

當視圖模型中的條件發生更改以使MyCollction列表中的某個特定項需要禁用時,我將IsEnabled屬性設置為false:

MyCollection[2].IsEnabled = false;

我現在想要通過OnPropertyChanged事件通知此更改的視圖,但我不知道如何引用集合中的特定項目。

OnPropertyChanged("MyCollection");
OnPropertyChanged("MyCollection[2].IsEnabled");

兩者都不起作用。

如何通知查看此更改? 謝謝!

ClassA需要實現INotifyPropertyChanged:

class ClassA : INotifyPropertyChanged
{
    private bool _isEnabled;
    public bool IsEnabled
    {
        get { return _isEnabled; }
        set
        {
            if (value != _isEnabled)
            {
                _isEnabled = value;
                OnPropertyChanged("IsEnabled");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

編輯:並使用像斯科特所說的ObservableCollection

EDIT2:調用PropertyChanged事件更短

而不是使用List,嘗試使用ObservableCollection。 此外,修改您的ClassA,以便它實現INotifyPropertyChanged,特別是對於IsEnabled屬性。 最后,修改MyViewModel類,以便它還實現INotifyPropertyChanged,尤其是對於MyCollection屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM