我相信我想做的事情足够“简单”,所以我可能只是漏掉了一些显而易见的东西。
在DataGrid中,我试图绑定一个复选框,以便当它被选中时,其行的背景颜色会改变。每一行都有一个复选框。我基本上正在实现自己的选择多行功能(这是产品要求,请勿询问),除了这个可视化指示已选择的行之外,我已经做好了其他所有事情。
我阅读了这个问题,但我缺乏答案的地方是在“BooleanPropertyOnObjectBoundToRow”中究竟要放什么。我还看了这个问题,并尝试使用RelativeSource进行操作,但没有成功。
我在代码后台创建我的网格,但这是我当前用于行的样式(其中定义了我的DataTrigger):
<Style x:Key="MyRowStyle" TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked}" Value="True">
<Setter Property="Background" Value="Blue"/>
</DataTrigger>
</Style.Triggers>
</Style>
现在在我的代码后台,我创建了DataGridTemplateColumn,并使用工厂来创建复选框,下面是与绑定相关的代码:
Binding checkBinding = new Binding("IsChecked");
checkBinding.Mode = BindingMode.OneWayToSource;
RelativeSource relativeSource = new RelativeSource();
relativeSource.AncestorType = typeof(DataGridRow);
relativeSource.Mode = RelativeSourceMode.FindAncestor;
checkBinding.RelativeSource = relativeSource;
factory.SetBinding(CheckBox.IsCheckedProperty, checkBinding);
可能感兴趣的是,我将DataGrid的ItemsSource设置为DataTable,但我的CheckBox列在DataTable中没有对应的列。我只是单独添加了模板列,也许这种缺乏基础存储正在影响它吗?
无论如何,如果您需要更多信息,请告诉我。谢谢!