2008-11-22 115 views
8

我一直在敲我的头反对这一段时间了。我不确定它为什么不起作用。对于整个WPF业务,我仍然很新。WPF绑定到组合框和选择一个项目

这是我对ComboBox

<ComboBox 
    SelectedValuePath="Type.FullName" 
    SelectedItem="{Binding Path=Type}" 
    Name="cmoBox" /> 

这里是填充组合框XAML(MyAssembly程序是我用可能的类型的列表创建的类)

cmoBox.ItemsSource = myAssembly.PossibleTypes; 

我设置的DataContext的父ComboBox的元素在后面的代码中是这样的:

groupBox.DataContext = listBox.SelectedItem; 

我想绑定g从组合框中选择正确的“可能的类型”。它不会选择任何东西。我曾尝试过SelectedValue和SelectedItem。当我将组合框的DisplayMemberPath更改为其他属性时,它改变了显示的内容,所以我知道它并没有完全被破坏。

任何想法???

回答

11

在XAML中,设置ItemsSource="{Binding}"和(在后面的代码中)将DataContext设置为myAssembly.PossibleTypes

+0

工作很好!谢谢 – 2008-11-22 03:31:18

+0

:)我没有测试它......但最近我已经进入WPF(由于在工作中使用它)......我想这是100%正确的,或者离开。 – 2008-11-22 03:32:13

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。

-5

我同意:绑定应该在XAML中。我把......在后面的代码中完全没有任何问题。数据源都是可重用的“资源”。 (好吧,代码隐藏构造函数调用InitializeComponent())。