如何绑定查找组合框?

时间:2011-05-04 20:46:17

标签: wpf entity-framework combobox binding

我的WPF4组合框下拉列表错误地显示了我的EF4实体的类名。这是相关的XAML:

<Window.Resources>
    <CollectionViewSource x:Key="myEntitiesViewSource"/>
</Window.Resources>

<ComboBox ItemsSource="{Binding Source={StaticResource myEntitiesViewSource}}" DisplayMemberPath="CategoryDescription" SelectedValuePath="CategoryID" />

以下是我的Window_Loaded事件中的代码:

var categoryList = from p in _context.Categories
                  orderby p.CategoryNumber
                  select p;

System.Windows.Data.CollectionViewSource myEntitiesViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("myEntitiesViewSource")));
// Load data by setting the CollectionViewSource.Source property:
myEntitiesViewSource.Source = categoryList;

我的数据库在项目和类别之间有很多关系,并且有一个名为ProjectCategories的连接表。 Categories实体作为单个实体自动创建,代表两个数据库表:

1)包含ID,CategoryDe​​scription和CategoryNumber以及

的类别的查找表

2)联接表ProjectCategories 仅包含两个字段 - 表项目和类别中的ID。实体模型与WPF窗口位于一个单独的项目中。

我的目标是允许用户从下拉列表中选择CategoryDe​​scription,然后单击“添加类别”按钮将所选类别添加到单独的ProjectCategories列表中。使用当前代码,我在组合框文本区域中看到正确的CategoryDe​​scription,但下拉列表仅显示实体类名称Categories(前面有它的命名空间)多次!

如何使这个简单的查找组合框正确绑定并显示CategoryDe​​scriptions列表和CategoryID的SelectedValue?注意:我接受只有代码的方法,如果它是XAML,则忽略CollectionViewSource可能的。

谢谢!

2 个答案:

答案 0 :(得分:1)

没关系。我问了这个问题并自己回答了。我的代码或XAML没有任何问题。 问题是由于使用第三方主题来设置控件的样式。一旦我删除了主题,组合框绑定问题就消失了。有关详情see this post

答案 1 :(得分:0)

这样的事情怎么样?

<ComboBox  ItemsSource="{Binding Categories}" 
           SelectedItem="{Binding Category}" DisplayMemberPath="Description" />

我会存储整个对象,而不是使用Selected Value。根据我的口味,选择的价值方法是旧的ASP风格。

SelectedItem="{Binding Category}"是您的Category对象。基本上它已经存储了ComboBox的选定项目。

例如,当用户单击某个按钮时,您可以从ViewModel触发一个Command,您将拥有相应的选定Category对象。