我的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,CategoryDescription和CategoryNumber以及
的类别的查找表2)联接表ProjectCategories 仅包含两个字段 - 表项目和类别中的ID。实体模型与WPF窗口位于一个单独的项目中。
我的目标是允许用户从下拉列表中选择CategoryDescription,然后单击“添加类别”按钮将所选类别添加到单独的ProjectCategories列表中。使用当前代码,我在组合框文本区域中看到正确的CategoryDescription,但下拉列表仅显示实体类名称Categories(前面有它的命名空间)多次!
如何使这个简单的查找组合框正确绑定并显示CategoryDescriptions列表和CategoryID的SelectedValue?注意:我接受只有代码的方法,如果它是XAML,则忽略CollectionViewSource可能的。
谢谢!
答案 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对象。