8

一段时间以来,我一直在反对这一点。我不确定为什么它不起作用。我对整个 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 更改为不同的属性时,它改变了显示的内容,所以我知道它并没有完全损坏。

有任何想法吗???

4

3 回答 3

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。

于 2009-12-08T11:15:24.333 回答
11

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

于 2008-11-22T03:29:06.543 回答
-5

我同意:绑定应该在 XAML 中。我在后面的代码中放了...检查..什么都没有。数据源都是可重复使用的“资源”。

(好吧,代码隐藏构造函数调用 InitializeComponent())。

于 2010-04-01T18:00:04.247 回答