我尝试做的是将ItemSource
绑定到模型中表中的所有值,并将SelectedValue
绑定到第一个链接到的表的外键。以下是我的尝试。
注意:client_typeID链接到的属性称为' ClientType'。 client_type1是我希望View显示的内容。
以下是获取客户类型列表的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
是权利表的属性。
这是我的ComboBox XAML:
<ComboBox Grid.Column="3" Grid.Row="0" MaxHeight="26" Margin="2" ItemsSource="{Binding Client_type_list}" Text="{Binding Record.Client_Type.client_type1}" />
所有这些都为我提供了ComboBox
,它具有正确的ItemSource和选择的正确值。唯一的问题是,当我更改SelectedItem
时,它会在运行Update方法时更新Client_Type表的描述,而不是Entity表的外键。
此外,我试图关注this示例,但它对我没有帮助。
任何帮助都会让我非常感激。
答案 0 :(得分:2)
实际上,组合框没有ID信息,您还必须绑定VM中的SelectedValue或SelectedItem属性。您应该在viewmodel中创建Client_Type列表,然后将其与View绑定。我做了一个小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"/>
ViewModel(假设你知道这个,我已经用viewmodel合并了代码背后的代码)
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);
}
}
现在当选择更改时,Record也因绑定而发生变化。希望这些信息有所帮助。