2017-07-06 3 views
0

インデクサーが定義されたクラスがあります。私がデフォルトのIndexerName(Item)WPF要素をうまく更新し続ける限り。例: XAMLでWPF要素も更新されるように、変更されたIndexerNameをC#でどのように使用するのですか?

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)); 
} 

述べたように、これは現在、うまく動作したよう

<Label Content="{Binding CurrentDevice[3]}"/> 

を次のように私はそれを結合しています。しかし、(イベントハンドラメソッドを通知など)のコードで読みやすくするために、私は(e.PropertyName ==「ElementItemをチェックするときに、私は提供C#のイベントハンドラメソッドが変更を認識し

[IndexerName("ElementItem")] 
public byte this[int index] { 
    get { return ListElements[index].Value; } 
    set { 
     ListElements[index].Value = value; 
     FirePropertyChanged("ElementItem[]"); 
    } 
} 

に元のコードを変更しようとしました[] ")しかしWPF要素はそうしませんでした。

WPFで動作させる方法はありますか?

私は、{Binding CurrentDevice.ElementItem [3]}へのXAMLバインディングの変更を成功させることさえ試みました。起動時に読み取られた最初の要素は成功しましたが、その後、要素は新しい値を表示しませんでした。

+0

。 "*は、インデクサが直接インデクサをサポートしていないプログラミング言語で知られている名前を示します*"。ただそれを使用しないでください。読みやすさを向上させるのではなく、混乱を招くだけです。 MSDNのページでは、「* System.Runtime.CompilerServicesのクラスはコンパイラライターのみが使用する*」とも言われています。 – Clemens

+0

'IndexerName'属性を適用した後でも' FirePropertyChanged( "Item []"); 'を残すことができます。 – Evk

答えて

関連する問題