【问题标题】:WPF/C# Combobox DataBindingWPF/C# 组合框数据绑定
【发布时间】:2011-08-25 20:11:26
【问题描述】:

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

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

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

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

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

有什么线索吗?

谢谢。

【问题讨论】:

    标签: c# .net wpf xaml binding


    【解决方案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>
    

    【讨论】:

    • 如果您要绑定的是ObservableCollection&lt;T&gt; 或任何实现INotifyCollectionChanged 的对象,则不需要。只需更新集合,绑定就会为您更新ComboBox
    【解决方案2】:

    您的绑定(特别是 Path 分配)看起来有问题。假设uinodes 是某种类型的 Enumerable,它看起来好像您正在尝试绑定到不存在的集合的“名称”属性。试试这个:

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

    顺便说一句,您可以使用输出窗口查看任何绑定错误。

    【讨论】:

    • 确实有效!我之前使用的是 VS 使用 Combox 的 Properties 等生成的。它似乎没有我想象的那么好。谢谢。
    • 但是我还有另一个与该组合框相关的问题。当我在画布上绘制节点 N1、N2、N3 后打开组合框时,它们会列在组合框中。但是,在那之后,如果我尝试另一个节点,它将不会被添加到我的组合框中。而且我不知道为什么 ItemsSource 没有更新。我尝试使用: ItemsSource="{Binding ElementName=graphCanvas, Path=uinodes, UpdateSourceTrigger=LostFocus}" DisplayMemberPath="name"
    猜你喜欢
    • 2014-02-03
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 2019-01-20
    • 1970-01-01
    相关资源
    最近更新 更多