WPF DataGrid 绑定到子类中的 属性

WPF DataGrid binding to property in subclass

我正在努力思考如何将数据网格列与子类中的数据正确绑定。为了解决问题,我做了一个小示例,如果解决了,将极大地帮助代码工作。

这里是类定义的:

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);
        }
    }

这是我的主窗口代码:

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>

运行 以上,您会注意到 Integers 正在正常工作,但不是 Data 列。 任何人关于如何使该列显示数据的任何想法 属性? 提前致谢!

修复它的最简单方法是覆盖 SubItem class 和 return Data 属性[=21 中的 ToString() 方法=]

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

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

另一个选项是更新 DataGridTextColumn 绑定并使用 Data 属性 的 Data sub-属性 from Item class(您可能需要更新命名:))

<DataGridTextColumn Header="Data" Binding="{Binding Data.Data}"/>

更复杂的选择是使用 DataGridTemplateColumn 并定义您自己的模板来表示数据

<DataGridTemplateColumn Header="Data">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Data.Data}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>