0
我有一個定義了索引器的類。只要我保持默認的IndexerName(Item)WPF元素很好地更新。 例如如何在c#中使用已更改的IndexerName,以便WPF元素也得到更新?
public byte this[int index] {
get { return ListElements[index].Value; }
set {
ListElements[index].Value = value;
FirePropertyChanged("Item[]");
}
}
protected void FirePropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
在XAML中,我結合它如下
<Label Content="{Binding CurrentDevice[3]}"/>
如前所述,目前這很好地工作。然而在代碼更好的可讀性(如通知事件處理方法),我試圖原代碼更改爲
[IndexerName("ElementItem")]
public byte this[int index] {
get { return ListElements[index].Value; }
set {
ListElements[index].Value = value;
FirePropertyChanged("ElementItem[]");
}
}
爲(e.PropertyName ==「ElementItem檢查時,我只要認識到改變C#事件處理方法[]「),但WPF元素沒有。
有沒有辦法讓它在WPF中工作?
我什至嘗試修改XAML綁定{Binding CurrentDevice.ElementItem [3]}沒有成功。在啓動時讀取的初始元素成功,但之後元素不顯示新值。
IndexerName屬性不打算由應用程序代碼設置。它「*表示在直接不支持索引器的編程語言中已知索引器的名稱*」。只是不要使用它。它不會增加可讀性,只會造成混淆。在MSDN頁面上,他們還說「* System.Runtime.CompilerServices中的類是編譯器編寫者僅使用*」的。 – Clemens
即使應用了「IndexerName」屬性,您仍可以離開FirePropertyChanged(「Item []」);'。 – Evk