在XAML中定义的ItemsSource内绑定

时间:2017-02-02 20:58:51

标签: c# wpf xaml

我想在XAML中定义ItemsSource的{​​{1}},并且这些项目使用数据绑定到我的视图的ItemsControl,但我无法让它工作。

这是简化版本的样子:

DataContext

<ComboBox DisplayMemberPath="Label" DataContext="Item 3"> <ComboBox.ItemsSource> <x:Array Type="{x:Type local:Item}"> <local:Item Label="Item 1" /> <local:Item Label="{Binding}" /> </x:Array> </ComboBox.ItemsSource> </ComboBox> 定义如下:

Item

我希望在ComboBox中看到两个项目,其中“Item 1”和“Item 2”作为文本,但第二个项目有一个空白文本。为什么呢?

2 个答案:

答案 0 :(得分:0)

您想要覆盖ItemTemplate的{​​{1}},示例如下所示:

ComboBox

示例输出如下所示:

enter image description here

答案 1 :(得分:0)

我终于找到了解释! ItemsSource不在可视化树中,这就是绑定不起作用的原因。我在这里找到了一个很好的解释和解决方法:https://stackoverflow.com/a/7661689,这导致我在另一个(类似的)解决方法:http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/

使用后者,我的代码现在看起来像这样(在这个有点过分简化和相当愚蠢的例子中):

<ComboBox DisplayMemberPath="Label" DataContext="Item 3">
    <ComboBox.Resources>
        <local:BindingProxy x:Key="proxy" Data="{Binding}" />
    </ComboBox.Resources>
    <ComboBox.ItemsSource>
        <x:Array Type="{x:Type local:Item}">
            <local:Item Label="Item 1" />
            <local:Item Label="{Binding Data, Source={StaticResource proxy}}" />
        </x:Array>
    </ComboBox.ItemsSource>
</ComboBox>

它有效。