我想在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”作为文本,但第二个项目有一个空白文本。为什么呢?
答案 0 :(得分:0)
答案 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>
它有效。