我有一个像这样的JibGrid DataGrid(JibGrid是一个标准DataGrid的开源相对简单的子类,用于实现过滤等内容):
<dataGrid:JibGrid ItemsSource="{Binding AvailableRDs}"
FilteredItemsSource="{Binding AvailableRDs}"
SelectedItem="{Binding SelectedAvailRD}"
AutoGenerateColumns="False" >
<dataGrid:JibGrid.Columns>
<DataGridCheckBoxColumn Header="Add?" Binding="{Binding Add}" Visibility="{Binding GetAddVisibility}"/>
<DataGridTextColumn Header="Tag" Binding="{Binding Tag}" />
<DataGridTextColumn Header="Revision Tag" Binding="{Binding RevisionTag}" />
<DataGridTextColumn Header="Current System" Binding="{Binding SystemStr}" />
</dataGrid:JibGrid.Columns>
</dataGrid:JibGrid>
目的是为每一行提供一个自定义类,为该行中每个单元格的内容提供属性 - Tag,RevisionTag等。所有这些都可以正常工作。我无法工作的是可见性绑定。如果表示DataContext中的Row的类的CanAdd属性返回False,我希望每行中的复选框不可见。当我在上面的XAML中添加Visibility绑定时,似乎发生的情况是WPF尝试将此绑定应用于实际列而不是每行,因此绑定无法连接。我可以使用WPF资源管理器并手动将行的复选框可见性DependencyProperty绑定到Row的datacontext的CanAdd属性,并且工作正常,但我无法弄清楚如何在XAML或代码中导致它生成该绑定自动选中每一行的复选框。有人对此有任何想法吗?
我一直在寻找这样的问题,似乎每个人都希望根据整个网格的datacontext中的某些内容来改变列本身的可见性,而没有其他人想要更改可见性基于该行的datacontext的各行中的事物。我尝试解决这个问题时尝试了解决方案here,这就是答案所要做的。
答案 0 :(得分:3)
您可以使用DataGridTemplateColumn
和BooleanToVisibilityConverter
来获得所需的结果
将BooleanToVisibilityConverter
添加到您的资源
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVis"/>
</Window.Resources>
为DataGridTemplateColumn绑定设置Converter
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Add}"
Visibility="{Binding CanAdd, Converter={StaticResource BoolToVis}}" ></CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>