WPF DataGrid绑定到子类中的属性

问题描述 投票:0回答:1

我正在努力解决如何正确地将datagrid列与子类中的数据绑定的问题。为了解决问题,我已经做了一些示例,如果解决了,将大大有助于使代码正常工作。

以下是定义的类:

public class SubItem
    {
        public string Data { get; set; }
    }

public class Item
    {
        public int Value { get; set; }
        public SubItem Data { get; set; }
    }

然后,我如下创建一个observablecollection:

public class IntData : ObservableCollection<Item>
    {
        public IntData() : base()
        {
            Item i = new Item() { Value = 56, Data = new SubItem() { Data = "testdata" } };
            Add(i);
        }
    }

这是我的MainWindow代码:

public partial class MainWindow : Window
    {
        public IntData Integers { get; set; }

        public MainWindow()
        {
            Integers = new IntData();

            InitializeComponent();
            dataGrid1.ItemsSource = Integers; // This is an important line
        }
    }

XAML代码保持简单:

<DataGrid Name="dataGrid1" AutoGenerateColumns="False" Margin="12">
   <DataGrid.Columns>
      <DataGridTextColumn Header="Integers" Binding="{Binding Value}"/>
      <DataGridTextColumn Header="Data" Binding="{Binding Data}"/>
   </DataGrid.Columns>
</DataGrid>

enter image description here

运行上述操作,您会发现Integers正在正常工作,但在Data列中却没有。任何人关于如何使该列显示Data属性的任何想法?预先感谢!

c# wpf data-binding datagrid observablecollection
1个回答
0
投票

最简单的解决方法是在ToString()类中重写SubItem方法并返回Data属性

public class SubItem
{
    public string Data { get; set; }

    public override string ToString()
    {
        return Data;
    }
}

另一个选择是更新DataGridTextColumn绑定并使用Data类的Data属性的Item属性(您可能需要使用其他名称)

<DataGridTextColumn Header="Data" Binding="{Binding Data.Data}"/>
© www.soinside.com 2019 - 2024. All rights reserved.