【问题标题】:WPF - Bind combobox to List of custom class objectsWPF - 将组合框绑定到自定义类对象列表
【发布时间】:2015-01-07 22:48:50
【问题描述】:

我有一个带有组合框的 WPF 项目,我试图将其绑定到 ComboboxItem 对象列表。 ComboboxItem 是我为示例项目创建的一个类。这部分工作......我的三个项目可用于组合框,但显示的值为空白,combobox.SelectedValue 的值为空。我看过几篇关于如何做到这一点的 stackoverflow 文章和其他博客文章。据我所知,我做对了。但显然我做错了什么。这是一个测试项目的源代码...

XAML:

<Window x:Class="WpfTestApp_ComboBoxes.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        Loaded="Window_Loaded">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="40"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <ComboBox x:Name="cboMyCombo" Grid.Row="0" 
                  SelectionChanged="cboMyCombo_SelectionChanged"></ComboBox>
    </Grid>
</Window>

C# 代码隐藏:

public partial class MainWindow : Window
{
    List<ComboboxItem> _list = new List<ComboboxItem>();

    public MainWindow()
    {
        _list.Add(new ComboboxItem() { DisplayValue = "One", InternalValue = "1" });
        _list.Add(new ComboboxItem() { DisplayValue = "Two", InternalValue = "2" });
        _list.Add(new ComboboxItem() { DisplayValue = "Three", InternalValue = "3" });

        InitializeComponent();
    }

    private void cboMyCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (e.AddedItems.Count > 0)
        {
            ComboBox cb = sender as ComboBox;
            MessageBox.Show(string.Format("Selected Item: {0}, Selected Value: {1}", cb.SelectedItem, cb.SelectedValue));
        }
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        cboMyCombo.ItemsSource = _list;
        cboMyCombo.DisplayMemberPath = "DisplayValue";
        cboMyCombo.SelectedValuePath = "InternalValue";
    }
}

ComboboxItem 类:

public class ComboboxItem
{
    public string DisplayValue;
    public string InternalValue;
}

【问题讨论】:

  • 为 DisplayValue 和 InternalValue 创建属性,而不是将它们作为公共成员
  • 你为什么要在你的代码中做你的数据绑定,当你可以做得更干净的时候in your xaml
  • 这只是一个测试项目。我尝试了多次使用 XAML 和代码隐藏的迭代,同时试图找出我做错了什么。原来它一直是 ComboboxItem 类。 ://

标签: c# wpf


【解决方案1】:

改变

public class ComboboxItem
{
    public string DisplayValue;
    public string InternalValue;
}

public class ComboboxItem
{
    public string DisplayValue {get;set;}
    public string InternalValue {get;set;}
}

【讨论】:

  • 哇。我想我太专注于组合框了,我错过了一个明显的问题。 叹息 谢谢。 (这是一个“只见树木不见森林”的案例。)我记得读过,现在你必须有一个Property 才能绑定。事后看来,这是显而易见的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 2013-10-04
  • 2014-11-05
  • 2017-09-17
  • 1970-01-01
  • 2012-01-25
相关资源
最近更新 更多