【发布时间】:2015-06-16 03:37:30
【问题描述】:
您好,感谢您光临。
我需要在运行时将 SolidColorBrush 绑定到 DataGrid 单元格 - DataGrid 的 ViewModel 包含 SolidColorBrush 类型的属性,并且列本身由 DataGridTemplateColumn 填充:
<DataGridTemplateColumn Header="source column" Width="3.5*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Background="{Binding Path=SourceColumnBackground}">
<Label x:Name="txbSourceName" Content="{Binding Path=SourceColumnDescriptionString}"></Label>
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=DataContext.SourceColumns, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
DisplayMemberPath="ColumnDescription"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
(使用边框是一项测试,因为我在将背景绑定到 ComboBox (Windows 8.1) 时遇到了类似的问题)。
文本的绑定可以作为一种魅力,ComboBox 的 ItemsSource 的绑定也可以。唯一不起作用的是背景。
我在 DataGrid 之外(在周围的 Grid 中)使用边框和背景绑定测试了它,如本例所示(不同的属性,因为它没有绑定到 DataGrid 数据)并且效果很好。
简而言之我的问题: 如果在 DataGrid 内部,将 SolidColorBrush 绑定到 Border 不会产生明显的效果 - 如果在外部,相同的代码可以工作。有人可以帮忙吗?
提前感谢您的帮助!
本
(已编辑,因为代码块吃了一行)
【问题讨论】:
-
作为旁注,您通常不应该在 ViewModel 中处理诸如颜色之类的事情(如果它不是您模型的属性)。如果颜色只表示错误/正常等状态,最好通过属性(布尔值、枚举等)表达这一点,并将样式触发器应用于该属性。
-
你是对的。谢谢你的反馈。我之前尝试过这种方式,但由于它不起作用,我通过刷子尝试了它 - 效果不佳。但我应该尽快重写我的代码。
标签: c# wpf data-binding datagrid