使用 WPF DataGrid,我需要根据单元格对象属性的相关值更改 DataGridCell 的各种显示和相关属性,例如 Foreground、FontStyle、IsEnabled 等。
现在这在代码中很容易做到,例如(使用 ObservableDictionaries 的 Observable 集合):
var b = new Binding("IsLocked") { Source = row[column], Converter = new BoolToFontStyleConverter() };
cell.SetBinding(Control.FontStyleProperty, b);
并且工作正常,但是我看不到如何在 XAML 中执行此操作,因为我找不到将路径设置为单元格对象属性的方法。
一种 XAML 尝试是:
<Setter Property="FontStyle">
<Setter.Value>
<MultiBinding Converter="{StaticResource IsLockedToFontStyleConverter}" Mode="OneWay" UpdateSourceTrigger="PropertyChanged">
<Binding />
<Binding RelativeSource="{x:Static RelativeSource.Self}"/>
</MultiBinding>
</Setter.Value>
</Setter>
但没有绑定到IsLocked属性
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var row = (RowViewModel) values[0];
var cell = (DataGridCell) values[1];
if (cell != null && row != null)
{
var column = DataGridMethods.GetColumn(cell);
return row[column].IsLocked ? "Italic" : "Normal";
}
return DependencyProperty.UnsetValue;
}
请注意,以前的版本返回row[col].IsLocked并使用 DataTrigger 设置 FontStyle,但返回的对象不是数据绑定的。
当然,请注意,应用程序在设计时不知道列是什么。
最后,DataTable 对我的要求来说效率太低了,但我很想看看如何用 DataTables 来完成,如果有这样的解决方案,这可能在其他地方有用(尽管我更喜欢使用集合)。
当然这是一个常见问题,我是一个 WPF 新手,试图在我的项目中使用所有 MVVM,但是这个问题阻碍了我使用 WPF DataGrid。