2015-09-08 152 views
2

我試圖做的是將ItemSource綁定到我的模型中的表中的所有值,並將SelectedValue綁定到第一個鏈接到的表的外鍵。以下是我所嘗試過的。將組合框綁定到模型/視圖模型

這裏是我的兩個表: The attribute the client_typeID is linked to is called 'ClientType'. client_type1 is what i want the View to display

注:client_typeID被鏈接到被稱爲 'ClientType' 屬性。 client_type1是我想要顯示的視圖。

這裏是我獲得客戶端類型的列表DataAccessService方法:

public List<string> GetClientTypes() 
{ 
    List<string> ClientType = new List<string>(); 
    foreach (var item in context1.Client_Type) 
    { 
     ClientType.Add(item.client_type1); 
    } 
    return ClientType; 
} 

這裏是我的ViewModel:

public List<string> Client_type_list 
{ 
    get { return ServerPxy.GetClientTypes(); } 
} 

private Entity record; 
public Entity Record 
{ 
    get { return record; } 
    set 
    { 
     record = value; 
     RaisePropertyChanged("Record"); 
    } 
} 

注:ServerPxy是我DataAccessService的情況下, Record是entitiy表的財產。

這裏是我的組合框XAML:

<ComboBox Grid.Column="3" Grid.Row="0" MaxHeight="26" Margin="2" ItemsSource="{Binding Client_type_list}" Text="{Binding Record.Client_Type.client_type1}" /> 

所有這一切都爲我提供了具有正確的ItemSource和選擇正確的值ComboBox。唯一的問題是,當我更改SelectedItem時,Update方法運行時,它更新Client_Type表的描述,而不是實體表的外鍵。

此外,我試圖按照this的例子,但它並沒有幫助我。

任何幫助,我將不勝感激。

+0

請同時看看這個迴應:http://stackoverflow.com/a/4902454/4424024它解釋了在ItemControls上使用綁定(如ComboBox)的SelectedItem,SelectedValue和SelectedValuePath之間的差異。 – Martin

回答

2

實際上,組合框沒有ID信息,您還必須綁定VM中的SelectedValue或SelectedItem屬性。您應該在viewmodel中創建Client_Type列表,然後將其與視圖綁定。我做了一個小POC希望這會給你足夠的信息。您的代碼看起來像

查看

<ComboBox Grid.Column="3" Grid.Row="0" MaxHeight="26" Margin="2" ItemsSource="{Binding Client_type_list}" 
        ItemTemplate="{StaticResource Client_typeDataTemplate}" 
        SelectedValue="{Binding Record.Client_Type}"> 
<ComboBox.Resources> 
<DataTemplate x:Key="Client_typeDataTemplate"> 
<TextBlock Text="{Binding Client_type1} "/> 
    </DataTemplate> 
    </ComboBox.Resources> 
    </ComboBox> 
     <Button Click="Button_Click" Height="20"/> 

視圖模型(我已合併背後的代碼的代碼視圖模型假設你知道這一點)

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = this; 
     Record = new Entity(); 
    } 

    public List<Client_Type> Client_type_list 
    { 
     get { return GetClientTypes(); } 
    } 

    private Entity record; 
    public Entity Record 
    { 
     get { return record; } 
     set 
     { 
      record = value; 
      OnPropertyChanged("Record"); 
     } 
    } 


    protected void OnPropertyChanged(string propertyName) 
    { 
     var handler = this.PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 


    public List<Client_Type> GetClientTypes() 
    { 
     List<Client_Type> ClientType = new List<Client_Type>(); 
     { 
      ClientType.Add(new Client_Type() { Client_type1 = "a", Client_typeId = "1" }); 
      ClientType.Add(new Client_Type() { Client_type1 = "b", Client_typeId = "2" }); 
     } 
     return ClientType; 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show(Record.Client_Type.Client_typeId); 
    } 

} 

現在,當選擇改變實錄也因爲綁定而發生變化。希望這些信息有幫助。

+0

謝謝你的迴應,請你進一步解釋ItemTemplate =「{StaticResource Client_typeDataTemplate}」。謝謝! –

+0

這是一個數據模板。請看看更新後的答案。 –