【问题标题】:Bind customObject to DataGrid将 customObject 绑定到 DataGrid
【发布时间】:2015-09-02 10:27:33
【问题描述】:

此处How do I bind a List<CustomObject> to a WPF DataGrid? 讨论了将对象列表绑定到 DataGrid 的基础知识。

我的设置稍微复杂一些: 我有RowModels,其中包含行的元数据以及CellModels 的列表。 CellModels 再次包含一些元数据和一个 Value 属性,它显示在 dataGrid 中。

为了填充我设置的 DataGrid

ItemsSource="{Binding RowModelList, UpdateSourceTrigger= PropertyChanged}"

并通过

一一映射列
<DataGridTextColumn Binding="{Binding CellModelList[0].Value, UpdateSourceTrigger= PropertyChanged}"/>
<DataGridTextColumn Binding="{Binding CellModelList[1].Value, UpdateSourceTrigger= PropertyChanged}"/>
...

这样我还可以为每一列指定一个ColumnHeader并修改每一列的表示。

但是,我还想在我的DataGridCell 样式中使用DataTrigger 来访问我的 CellModels 的元数据。

这行得通,但是.. 很好

当然,我可以为每一列创建一个样式,例如

<Style x:Key="CellStyleColumnZero" TargetType="DataGridCell">
    <Style.Triggers>
        <DataTrigger Binding="{Binding CellModelList[0].Enabled}" Value="False">
            <Setter Property="IsEnabled" Value="False"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

问题:

我需要根据CellModel 中的元数据设置DataGridCell 的属性。

我确信有一种更优雅的解决方案(比上面显示的解决方案),它不需要自定义每一列。我仍然需要能够手动更改单个列(尤其是 ColumnHeaders),这就是为什么我首先手动声明 DataGridTextColumns 的原因。

您对如何正确处理这个问题有什么建议吗?

【问题讨论】:

  • 对这个优雅的解决方案使用 C# 反射。它可以列出你CellModel的元数据
  • 我认为您误解了这个问题。元数据是指CellModel 中的属性(如启用、值等)。问题是在当前解决方案中,CellModel 没有绑定到 DataGridCell(只有 Value 属性是)。因此我无法通过DataGridCell-Style 中的数据绑定访问CellModel
  • 为什么不能直接将 Value 转换为 CellModel ?

标签: c# wpf data-binding datagrid


【解决方案1】:

这已在后续问题中得到解答。

我使用的解决方案是为DataGridCell 创建一个附加属性,我在其中存储 CellModel 并从那里访问属性。

查看链接问题的代码: Structure of WPF DataGrid - change cells depending on value

【讨论】:

    猜你喜欢
    • 2011-06-26
    • 2016-10-07
    • 2013-09-07
    • 1970-01-01
    • 2013-07-28
    • 2014-10-10
    • 2013-08-06
    • 2012-12-19
    相关资源
    最近更新 更多