【问题标题】:How can I set ComboBox DataContext in XAML?如何在 XAML 中设置 ComboBox DataContext?
【发布时间】:2012-08-30 15:53:57
【问题描述】:

我正在尝试理解 Binding,所以我想出了一个非常简单的程序来尝试和测试它。

我的 MainWindow 中有以下元素:

<ComboBox Name="comboBox1" ItemsSource="{Binding}" />

在我的代码中,我有以下可观察的集合:

public ObservableCollection<string> ComboItems = new ObservableCollection<string>();

我可以在运行时的任何时候以这种方式成功添加项目:

comboBox1.DataContext = ComboItems;
ComboItems.Clea();
ComboItems.Add("Item");

我的问题是,我怎样才能在 XAML 中设置 DataContext,这样我就不必在代码中执行它了?有可能吗?

谢谢!

【问题讨论】:

    标签: wpf xaml data-binding combobox


    【解决方案1】:

    常见的是:

    <Window DataContext="{Binding RelativeSource={RelativeSource Self}}">
        <ComboBox ItemsSource="{Binding ComboItems}" .../>
    

    但是,通常您希望将另一个对象实例注入为DataContext,例如查看 MVVM 模式。 WPF 中的属性是inherited,所以ComboBox 具有DataContextDataContext,但是它可以在任何级别被覆盖。

    注意:要使绑定起作用,ComboItems 必须是公共属性,而不是字段。

    感兴趣的资源:

    【讨论】:

    • 最后一部分的一个问题。我将 ComboItems 更改为 ObservableCollection { get;放; }。我相信这就是您所说的公共财产的意思,但是,这给了我一个“未设置对象引用...”错误。
    • @B-Rad:您是否在没有先设置值的情况下访问它? (此外,您通常应该将属性设置为仅用于集合,并由只读字段支持。即private readonly OC&lt;Type&gt; field = new OC&lt;Type&gt;(); public OC&lt;Type&gt; Property { get { return field; } }
    • @B-Rad:还请彻底阅读数据绑定概述。
    • 非常感谢您提供的信息和链接。效果很好,我学到了很多东西!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2013-09-29
    • 2013-02-19
    • 1970-01-01
    相关资源
    最近更新 更多