2012-03-27 91 views
0

背景說明: 我有一個自定義控件列表框,顯示集合(稱爲Person)的值。 Person類有PERSON_ID,名字,姓氏等綁定到XAML中屬性的值(也是屬性)值

new Person(){ 
       Person_id = "T001", 
       FirstName = "Fname1", 
       LastName = "LName1" 
      }); 

new Person() 
      { 
       Person_id = "T002", 
       FirstName = "Fname2", 
       LastName = "Lname2" 
      }); 

有一個在我的自定義控制命名DefaultCategory屬性。該屬性定義在Listbox中顯示哪個Person屬性,例如在XAML中,如果我將傳遞DefaultCategory =「FirstName」,那麼我的自定義控件列表框將包含項目爲「Fname1」,「Fname2」。

要求: 我想從我的自定義控件的resourceDictionary(Generic.XAML)中應用datatemplate。 我做一樣 -

<DataTemplate x:Key="ComboItemTemplate"> 
    <TextBlock Text="{Binding Path=DefaultCategory}" FontStyle="Italic"/> 
</DataTemplate> 

問題: 當我運行我的應用程序,自定義控制列表框顯示「名字」的兩倍,而不是顯示「Fname1」,「Fname2」

總結:我想(DefaultCategory)的值(「FirstName」)的值(「Fname1」)綁定 我想綁定valueof(DefaultCategory)的方式而不是綁定valueof(Defaultof)

任何類型的幫助表示讚賞。

回答

2

你不能這樣做。您將文本塊綁定到包含「FirstName」的DefaultCategory屬性,因此您的結果是預期的。

如果要動態更改綁定的,你可以使用觸發器在您的模板爲每個可用字段:

<DataTemplate x:Key="ComboItemTemplate"> 
    <TextBlock Name="DefaultText" FontStyle="Italic"/> 

    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding Path=DefaultCategory}" Value="FirstName"> 
      <Setter TargetName="DefaultText" Property="Text" Value="{Binding FirstName}"/> 
     </DataTrigger> 

     <DataTrigger Binding="{Binding Path=DefaultCategory}" Value="LastName"> 
      <Setter TargetName="DefaultText" Property="Text" Value="{Binding LastName}"/> 
     </DataTrigger> 
    </DataTemplate.Triggers> 

</DataTemplate> 
+0

我已經做了完全一樣和它給我想要的結果。非常感謝。 – user1294794 2012-03-27 09:46:15