【问题标题】:C# WPF - Databinding DataGridComboboxColumn SelectedValueBindingC# WPF - 数据绑定 DataGridComboboxColumn SelectedValueBinding
【发布时间】:2018-11-29 13:46:00
【问题描述】:

我正在尝试将数据绑定到 DataGridComboBoxColumn。

我已经成功绑定了 ItemsSource,但是绑定的值不会被选中,而是 ComboBox 没有选择任何内容。

数据网格:

<DataGrid x:Name="dg" ItemsSource="{Binding}" AutoGenerateColumns="false">
    <DataGrid.Columns>
        <DataGridComboBoxColumn Header="Name" SelectedValueBinding="{Binding name}" ItemsSource="{Binding Source={x:Static K:Material.loadedMaterials}}" DisplayMemberPath="name"/>
        <DataGridTextColumn Header="Name2" Binding="{Binding name}"/>
    </DataGrid.Columns>
</DataGrid>

材料等级:

public class Material {
    public static List<Material> loadedMaterials;

    static Material() {
        loadedMaterials = new List<Material>();

        loadedMaterials.Add(new Material("TEST1", "", ""));
        loadedMaterials.Add(new Material("TEST2", "", ""));
        loadedMaterials.Add(new Material("TEST3", "", ""));
    }

    public string name { get; set; }
    public string name2 { get; set; }
    public string name3 { get; set; }

    public Material(string n, string n2, string n3) {
        name = n;
        name2 = n2;
        name3 = n3;
    }
}

主窗口:

public partial class MainWindow : Window {
    public System.Collections.ObjectModel.ObservableCollection<Material> mat;

    public MainWindow() {
        InitializeComponent();

        mat = new System.Collections.ObjectModel.ObservableCollection<Material>();
        mat.Add(new Material("TEST1", "TEST1", "TEST1"));

        dg.DataContext = mat;
    }
}

正如您在此处看到的,DropDown 已加载,具有相同数据绑定的 Textbox 正确显示,但 ComboBox 为空。

我期待TEST1 被选中并显示在组合框中。

【问题讨论】:

  • 没有选择任何内容意味着您看不到组合框中的值,对吧?
  • @FredM 是的,完全正确。由于绑定列表中有一个对象,我预计该值(TEST1)会显示出来。

标签: c# wpf xaml data-binding


【解决方案1】:

你必须在你的DataGridComboBoxColumn上设置SelectedValuePath

<DataGridComboBoxColumn Header="Name" SelectedValueBinding="{Binding name}" ItemsSource="{Binding Source={x:Static K:Material.loadedMaterials}}" DisplayMemberPath="name" SelectedValuePath="name"/>

【讨论】:

  • 这工作,谢谢。你能解释一下这两个属性之间的区别吗?我刚开始使用 Databindings,并认为 SelectedValueBinding 应该可以完成全部工作。
  • @TimSchmidt SelectedValuePathSelectedValue(Binding) 总是一起用作SelectedItem 的替代品。 SelectedValuePath 是由SelectedValue 返回的SelectedItem 属性的路径。另见stackoverflow.com/questions/4902039/…
  • 啊,我明白了。谢谢你的解释。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 2017-06-25
  • 2011-10-26
  • 2014-02-28
  • 2011-07-27
相关资源
最近更新 更多