WPF / C#Combobox DataBinding

时间:2011-05-15 09:32:08

标签: c# .net wpf xaml binding

首先,我想为我的英语道歉,这远非完美(它不是我的母语......)。

我的XAML代码中存在与数据绑定相关的问题。我有一个combox,它应该列出我放在自定义画布上的所有图形节点。我的图形节点在列表graphCanvas.uinodes中引用,每个节点都有name。这就是我想在组合框中显示的内容。

所以我尝试过这样的事情:

<ComboBox ItemsSource="{Binding ElementName=graphCanvas, Path=uinodes/name}"
    Height="23" HorizontalAlignment="Left" Name="comboBox1"
    VerticalAlignment="Top" Width="71" Foreground="Black"  />

但即使在我的画布上绘制节点后,我的combox也是空的......

有任何线索吗?

感谢。

2 个答案:

答案 0 :(得分:1)

使用ElementName的绑定查找具有该名称的WPF元素。我怀疑你是否已经为Canvas创建了子类,并为其添加了uinodes属性,这是Path找到某种东西的唯一方法,即使路径语法是正确的,但事实并非如此。

如果在运行程序时查看“输出”窗口,您将看到一条错误消息,告诉您绑定无法正常工作的原因。这是一个开始。

但即使这样,你也不会用这种方法得到你想要的东西。您可能想要的更像是:

<ComboBox ItemsSource="{Binding ElementName=graphCanvas, Path=uinodes}" 
          DisplayMemberPath="name"/>

甚至

<ComboBox ItemsSource="{Binding ElementName=graphCanvas, Path=uinodes}">
   <ComboBox.ItemTemplate>
      <TextBlock Text="{Binding name}"/>
   </ComboBox.ItemTemplate>
</ComboBox>

答案 1 :(得分:0)

您的绑定(特别是Path分配)看起来不对。假设uinodes是某种类型的Enumerable,它看起来好像是在尝试绑定到集合的`name'属性,而该属性不存在。试试这个:

ItemsSource="{Binding ElementName=graphCanvas, Path=uinodes}" DisplayMemberPath="name"

另外,您可以使用输出窗口查看任何绑定错误。