2017-07-25 246 views
0

我有一個類名爲 「員工」:WPF-組合框綁定

public string Forname { get; set; } 
public string Lastname { get; set; } 
public EmployeeGroup Group { get; set; } 

一類 「EmployeeGroup」:

public string Groupname { get; set; } 
public short GroupID { get; set; } 

和WPF:

<ComboBox x:Name="cmbGroup" SelectedItem="{Binding Group}" HorizontalAlignment="Left" Margin="342,226,0,0" VerticalAlignment="Top" Width="129"/> 
<TextBox x:Name="txtForename" Text="{Binding Forname}" HorizontalAlignment="Left" Height="24" Margin="342,21,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="129" VerticalContentAlignment="Center" GotFocus="SelectText"/> 
<TextBox x:Name="txtLastname" Text="{Binding Lastname}" HorizontalAlignment="Left" Height="24" Margin="342,47,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="129" VerticalContentAlignment="Center" GotFocus="SelectText"/> 
<ListBox x:Name="lstEmployee" HorizontalAlignment="Left" Height="362" Margin="25,19,0,0" VerticalAlignment="Top" Width="217" SelectionChanged="lstEmployee_SelectionChanged"/> 

組合框和ListBox從代碼隱藏文件(ObservableCollection)中獲取源代碼:

cmbGroup.ItemsSource = Database_Contract.GetListOfContract(); 
lstEmployee.ItemsSource = Database_Employee.GetListOfEmployee(); 

我設置的DataContext當員工在列表框中選擇在WPF的代碼隱藏文件:

DataContext = lstEmployee.SelectedItem; 

與列表框的結合和文本框工作正常,但我有一個Combobox問題: 源代碼工作,意味着我可以選擇不同的組。但是對選定的員工沒有約束力。所以,當我選擇員工時,帶有前綴和姓氏的文本框填充正確,但組合框是空格。但是當我點擊Combobox時,我可以從給定的組中選擇。

那麼我做錯了什麼?

編輯: 當我將ComboBox.SelectedIndex綁定到Group.GroupID,然後它的工作。但不能保證GroupID和ComboBox-Index是相同的。

+0

在你的xaml中是一個名爲cmbGroup的'ComboBox',你正在設置名爲cmbContract的'ComboBox'的'ItemsSource'。這有點令人困惑。 可以肯定的是:你的'ComboBox'中的項目對每個員工都是一樣的,當你在'ListBox'中選擇一個員工時,你想選擇'ComboBox'中的匹配條目? –

+0

需要注意的是,您可以不用更改Window的(?)DataContext,而是使用'Text =「{Binding SelectedItem.Lastname,ElementName = lstEmployee}''編寫您的綁定。 – Clemens

+0

您還必須確保SelectedItem屬性綁定的組實例實際上包含在ListBox的ItemsSource集合中。如果它們是不同的對象,則可以覆蓋EmployeeGroup類的Equals方法。 – Clemens

回答

0

我找到了解決方案... 我已經更改爲MVVM,將cmbGroup的綁定設置爲ListOfGroup,重寫了EmployeeGroup類的GetHashCode和Equals方法,並且它可以工作。 謝謝你們!

0

我認爲問題是當您將整個視圖的DataContext設置爲選定的員工。
這也有效地改變了組合框的綁定上下文,所以所有的綁定都在改變。

我建議你給自己在代碼中SelectedEmployee屬性,並設置在selectedItemChanged事件,然後您可以更改綁定的文本框來讀取Text="{Binding SelectedEmployee.Forname}"

你可能會發現,價值贏得」當你這樣做時,屏幕會自動更新,這是因爲你需要在你的表單代碼中實現INotifyPropertyChanged,然後從屬性設置器中調用OnPropertyChanged來告訴綁定刷新。

+0

「將整個視圖的DataContext設置爲選定的Employee,這也有效地改變了組合框的綁定上下文,因此所有綁定都在改變」不是問題,而是OP想要做什麼。 – Clemens