这就是我所拥有的:
Category
表,仅包含id和name列。DataContext
的单例(静态类)。 在代码隐藏文件中,我有一个如下属性:
private System.Data.Linq.Table<Categories> Categories
{
get
{
return LibraryDataStore.Instance.Categories;
}
}
我想简单地将类别绑定到ComboBox
。不敢相信我已经在这几个小时了,没有结果:(
我不想在后面的代码中设置ItemsSource
,我想只做XAML,但是怎么做?
我发现的大多数例子都是在XAML中定义数据,或者以编程方式设置ItemsSource
,但这不是我想要的。
为什么这不是,例如,工作?
<ComboBox Name="cmbCategory"
Margin="3"
MinWidth="200"
ItemsSource="{Binding Path=Categories}"
DisplayMemberPath="Name"/>
作为旁注,我想说我发现wpf的数据绑定模型极难学习,因为它太厚了,而且只有很多方法可以做。
稍后编辑:
我发现如果我像这样设置ItemsSource
它是有效的:
var cats = from c in LibraryDataStore.Instance.Categories
select c;
cmbCategory.ItemsSource = cats;
但是,我无法弄清楚为什么它在XAML中不起作用。
答案 0 :(得分:2)
您必须将UserControl的datacontext设置为LibraryDataStore.Instance。然后,此datacontext将可视树过滤到组合框(因此无需设置组合框本身的datacontext)。然后,您的xaml将能够绑定到此对象“Categories”的公共属性。
Bea Stollnitz在她的博客上提供了如何检测数据绑定问题(即它无声地失败)的概述 - &gt; http://bea.stollnitz.com/blog/?p=52
答案 1 :(得分:0)
您需要将DataContext
(或UserControl
)的Page
设置为当前实例:
this.DataContext = this;