2017-07-06 19 views
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]}沒有成功。在啓動時讀取的初始元素成功,但之後元素不顯示新值。

+0

IndexerName屬性不打算由應用程序代碼設置。它「*表示在直接不支持索引器的編程語言中已知索引器的名稱*」。只是不要使用它。它不會增加可讀性,只會造成混淆。在MSDN頁面上,他們還說「* System.Runtime.CompilerServices中的類是編譯器編寫者僅使用*」的。 – Clemens

+0

即使應用了「IndexerName」屬性,您仍可以離開FirePropertyChanged(「Item []」);'。 – Evk

回答

相關問題