【问题标题】:Combobox binding to array fails组合框绑定到数组失败
【发布时间】:2012-07-30 21:36:33
【问题描述】:

很抱歉问这个问题,但我真的是 WPF 的新手,我搜索了几个小时试图找出这个问题的问题。

给定以下代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        List<Data> _Buffer = new List<Data>();
        for (int i = 0; i < 50; i++)
        {
            _Buffer.Add(new Data(i, i.ToString()));
        }

        //Also tried:
        //comboBox1.DataContext = _Buffer.ToArray();
        comboBox1.ItemsSource = _Buffer.ToArray();
        comboBox1.SelectedValuePath = "Val";
        comboBox1.DisplayMemberPath = "ValName";
        comboBox1.UpdateLayout();
        comboBox1.SelectionChanged += new SelectionChangedEventHandler(comboBox1_SelectionChanged);
    }

    void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        MessageBox.Show(((Data)e.AddedItems[0]).ValName);
    }

    struct Data
    {
        public Data(int Val, string ValName)
        {
            this.Val = Val;
            this.ValName = ValName;
        }
        public readonly int Val;
        public readonly string ValName;
    }
}

我猜想将一个简单数组绑定到一个组合是非常容易的,实际上它是,除了一个小问题,它在组合列表中没有显示任何内容。

XAML:

<ComboBox Height="23" HorizontalAlignment="Left" Margin="109,82,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" ItemsSource="{Binding}" />

正确的做法是什么?

【问题讨论】:

  • 嗨,您正在对 ComboBox 进行两次绑定,根据您的情况,这可能会影响:擦除 XAML 中的绑定
  • 你好 Dante,我摆脱了 ItemsSource="{Binding}" 但它一直在做同样的事情 =( ...实际上,组合“有” Data 对象,但它不显示关联的文本
  • 您是否尝试过将 Val 和 ValName 设为属性? public int Val { get; private set; }
  • 天啊!这是正确的!!!我按属性进行了更改,现在显示正常...但是,为什么??!!!它应该是这样的吗?

标签: wpf binding combobox arraylist


【解决方案1】:

因为SelectedValuePathDisplayMemberPath 是项目绑定的路径,您必须将ValValName 设为属性:

public int Val { get; private set; }
public string ValName { get; private set; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多