我知道有很多关于DataBinding组合框的问题,还有很多教程,但我觉得这些教程很难。所以,我在问这个问题。
假设我的数据库中有两个表:
客户
CustomerID
Name
GenderID
GenderTypes
GenderTypeID
GenderType
我使用ADO.Net实体数据模型创建了我的模型。所以,我正在使用实体框架。
现在我有了一个ViewModel,我在其中声明了一个名为Customers的属性,如下所示:
private List<Customer> _customers;
public List<Customer> Customers
{
get
{
return _customers;
}
set
{
_customers = value;
OnPropertyChanged("Customers");
}
}
现在我有一个像这样的视图:
<Window ......>
<Window.DataContext>
<vm:MainWindowViewModel />
</Window.DataContext>
<Grid>
<Grid.RowDefinitions>
..
..
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
..
..
</Grid.ColumnDefinitions>
<TextBlock Text="Name" ....../>
<TextBox Text="{Binding Name}"...../>
<TextBlock Text="Gender" ....../>
<TextBox ItemsSource="????"
SelectedValue="????"
SelectedValuePath="????"...../>
</Grid>
</Window>
我不知道如何绑定组合框,这样我就可以看到男性和女性作为组合框的项目,当我选择时,我应该得到相应的GenderID而不是GenderType。
我知道这是一个非常简单直接的问题,但我对WPF非常陌生,并试图学习它。
答案 0 :(得分:3)
试试这个:
<ComboBox
<!--ItemsSource bound to property of type collection of GenderTypes, containing all gender types you have -->
ItemsSource="{Binding MyGenderTypes}"
<!--Tell comboBox to display GenderType property of selected GenderTypes-->
DisplayMemberPath="GenderType"
<!--Tell comboBox that the SelectedValue should be GenderID property of selected GenderTypes-->
SelectedValuePath="GenderID"
<!--SelectedValue bound to property of type int (the same type of GenderID)-->
SelectedValue="{Binding SelectedGenderID, Mode=TwoWay}" />
您将获得显示GenderType的组合框,但所选值将是相应的GenderID。正如你所愿......
答案 1 :(得分:2)
在ViewModel类
中添加Genders
public List<GenderTypes> Genders
{
get
{
return _genders;
}
set
{
_genders = value;
OnPropertyChanged("Genders");
}
}
像这样使用后。
<ListBox ItemsSource="{Binding Customers}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="Name" />
<TextBox Text="{Binding Name}" />
<TextBlock Text="Gender" />
<ComboBox ItemsSource="{Binding Genders,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}" DisplayMemberPath="GenderType" SelectedValue="{Binding GenderID}" SelectedValuePath="GenderTypeID"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>