我有一個資料網格。一列是一個復選框,我想在修改一行的復選框時進行處理。
我看過這段代碼,起初它看起來是我想要的,但我有一些疑問。
public ObservableCollection<YourDataType> Items
{
get { return items; }
set { items = value; NotifyPropertyChanged("Items"); }
}
public YourDataType SelectedItem
{
get { return selectedItem; }
set { selectedItem = value; NotifyPropertyChanged("SelectedItem"); }
}
在視圖模型建構式中:
SelectedItem.PropertyChanged = SelectedItem_PropertyChanged;
在視圖模型中:
private void SelectedItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
// this will be called when any property value of the SelectedItem object changes
if (e.PropertyName == "YourPropertyName") DoSomethingHere();
else if (e.PropertyName == "OtherPropertyName") DoSomethingElse();
}
我的疑問是在建構式中它訂閱了所選專案的事件,但是當我選擇資料網格中的另一行時,所選專案會發生變化。那么它只訂閱一次嗎?到哪個專案?
此外,所選專案在建構式時為空,所以我想我會得到一個空錯誤,我猜。
所以我真的不確定這是否真的是一個好的解決方案,如果是,我不明白為什么它可以作業。
當資料網格中的一個專案的屬性發生更改時,還有另一種解決方案可以處理嗎?但起初,這個解決方案似乎清晰而簡單。
解決方案來自這里。
謝謝。
uj5u.com熱心網友回復:
您必須在 SelectedItem 屬性設定器中附加和分離事件處理程式:
public YourDataType SelectedItem
{
get { return selectedItem; }
set
{
if (selectedItem != null)
{
selectedItem.PropertyChanged -= SelectedItem_PropertyChanged;
}
selectedItem = value;
if (selectedItem != null)
{
selectedItem.PropertyChanged = SelectedItem_PropertyChanged;
}
NotifyPropertyChanged(nameof(SelectedItem));
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/355544.html
