WPF Combobox数据绑定到L2S表

时间:2009-08-19 12:01:03

标签: wpf linq data-binding combobox

这就是我所拥有的:

  • 一个SQL CE数据库,它包含此Category表,仅包含id和name列。
  • 使用sqlmetal生成的dbml
  • 暴露linq 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中不起作用。

2 个答案:

答案 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;