2013-12-12 174 views
0

我想將兩個類屬性綁定到組合框的顯示。含義:如何綁定到WPF組合框?

Jack - SupplyChain 
Sarah - HR 
James - IT 

我有下面的類:

public class MyUser { 
    public string Name {get;set;} 
    public int EmpID {get;set;} 
    public string Department {get;set;} 
} 

當我設置了組合框只是一個單一的財產的DisplayMemberPath =「姓名」,我在下拉看到物體的名稱來代替。

我不知道如何使它綁定到兩個屬性,更少一個。有誰知道這是怎麼做到的嗎?

我加入MyClass的對象組合框:

MyComboBox.Items.Add(classInstance); 

,因爲我想拔出選擇了滿級。這將發生在按鈕點擊事件上。

回答

1

不要在WPF中的過程代碼中操作UI元素。這就是XAML的用途。

創建一個簡單的視圖模型:

public class MyViewModel 
{ 
    public ObservableCollection<MyUser> Users {get;set;} 

    public MyUser SelectedUser {get;set;} 
} 

然後設置這個視圖模型作爲UI的DataContext

public MyWindow() 
{ 
    InitializeComponent(); 
    DataContext = new MyViewModel(); 
} 

而在XAML:

<ComboBox ItemsSource="{Binding Users}" 
      SelectedItem="{Binding SelectedUser}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <TextBlock.Text> 
        <MultiBinding StringFormat="{}{0} {1}"> 
         <Binding Path="Name"/> 
         <Binding Path="Department"/> 
        </MultiBinding> 
       </TextBlock.Text> 
      </TextBlock> 
     </DataTemplate> 
    <ComboBox.ItemTemplate> 
</ComboBox> 

然後你只需填充Users收集與相關數據,以及何時需要檢索已從您選擇的值中檢索SelectedUser屬性的值。無需從UI手動「讀取」數據。這就是DataBinding的用途。

+0

什麼是用戶和SelectedUser? – 4thSpace

+0

@ 4thSpace看到我最新的編輯。 –

+0

我在這個UI上有多個組件。將整個UI設置爲只有一個組件的DataContext會干擾其他組件嗎?似乎最好爲需要特定DataContext的組件設置DataContext。 – 4thSpace