2009-11-04 18 views
18

ビューのDatacontextとしてThisClassShouldBeTheDataContextクラスのインスタンスが与えられたWPFでコントロールにIndexedプロパティをバインドする方法

class ThisClassShouldBeTheDataContext 
{ 
    public Contacts Contacts {get;set;} 
} 

class Contacts 
{ 
    public IEnumerable<Person> Persons {get;set;} 
    public Person this[string Name] 
    { 
    get 
    { 
     var p = from i in Persons where i.Name = Name select i; 
     return p.First(); 
    }  
    } 
} 

class Person 
{ 
    public string Name {get;set;} 
    public string PhoneNumber {get;set;} 
} 

Contact["John"].PhoneNumberをテキストボックスにバインドするにはどうすればよいですか?

<TextBox Text="{Binding ?????}" /> 

答えて

27

インデクサ表記は、基本的にC#のと同じである。

<TextBox Text="{Binding Contacts[John].PhoneNumber}" /> 

は、詳細はMSDNでBinding Declarations Overview > Binding Path Syntaxを参照してください。

これは、私のインデックスが文字列でない、またはそれはVMから別のプロパティからだ場合

+19

は、何と言う任意のデータ型のためのコース、仕事... {コンタクト[ThisIsAnotherPropertyFromTheVm]をバインドしません.PhoneNumber }。どうやってやるの? – Lance

+2

WPFの使用を開始したときのコメントに質問をしてから何年も経ちましたが、今私はそれに答えるつもりです。私はこれを行う最善の方法は、インデックスされたプロパティにバインドすることではないと思う。 getterがインデックスされたプロパティを返す別のプロパティを公開するだけです(連絡先[ThisIsAnotherPropertyFromTheVm] .PhoneNumber) – Lance

+0

リンクが壊れています –

関連する問題