我一直在反对这个问题已经有一段时间了。我不确定为什么它不起作用。我对这整个WPF业务还很陌生。
这是我的组合框的XAML
<ComboBox
SelectedValuePath="Type.FullName"
SelectedItem="{Binding Path=Type}"
Name="cmoBox" />
以下是填充ComboBox的内容(myAssembly是我使用可能类型列表创建的类)
cmoBox.ItemsSource = myAssembly.PossibleTypes;
我将DataContext设置在后面代码中ComboBox的父元素中,如下所示:
groupBox.DataContext = listBox.SelectedItem;
我希望绑定从组合框中选择正确的“可能类型”。它没有选择任何东西。我尝试过SelectedValue和SelectedItem。当我将ComboBox的DisplayMemberPath更改为其他属性时,它更改了显示的内容,因此我知道它并未完全破坏。
任何想法???
答案 0 :(得分:12)
你也可以在xaml而不是代码隐藏中设置绑定(我们尽可能避免在我们的xaml页面中隐藏代码)。我假设myAssembly是控件代码隐藏的属性,是MyAssembly类的一个实例......
<UserControl
x:Class="MyNamespace.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding}">
<ComboBox
Width="200"
ItemsSource="{Binding Path=myAssembly.PossibleTypes}"
SelectedValuePath="Type.FullName"
SelectedItem="{Binding Path=Type}"
Name="cmoBox" />
</UserControl>
这可能只是个人偏好,但我认为最好在xaml中使用数据绑定,因为它可以更容易地查看每个控件绑定的内容,而无需通过代码隐藏。此外,如果要从代码中引用ComboBox,则应在xaml中为其指定x:Name属性,而不仅仅是Name。
答案 1 :(得分:11)
在XAML中,设置ItemsSource="{Binding}"
和(在后面的代码中)将DataContext
设置为myAssembly.PossibleTypes
。
答案 2 :(得分:-5)
我同意:绑定应该在XAML中。我把......检查......后面的代码什么都没有。数据源都是可重用的“资源”。
(好吧,代码隐藏构造函数调用InitializeComponent())。