将bool值绑定到xamdatagrid时,该列将自动使用xamcheckeditor显示数据。我想使用外部按钮来控制复选框列的允许值,当我更改allowedit属性时,列中的复选框将应用禁用/启用样式(变为灰色) 在我的资源字典中,我为xamcheckeditor编写了一个样式:
<ControlTemplate.Triggers>
<Trigger Property="IsReadOnly" Value="True">
<Setter TargetName="PART_FocusSite" Property ="IsEnabled" Value="False" />
</Trigger>
</ControlTemplate.Triggers>
因此,当该字段不可编辑时,该复选框将显示为已禁用。
我还有一个按钮来控制列的允许值,当按钮单击时,它将调用:
grid.FieldsLayouts[0].Fields["Enabled"].Settings.AllowEdit = true/false
但启用/禁用操作未自动应用,我必须单击过滤器以刷新网格以使其应用...
请告知我应该如何实施,点击按钮设置允许的字段,复选框将自动启用。
谢谢!
Enzhou
答案 0 :(得分:3)
如果你想要做的就是当它所属的字段将AllowEdit设置为false / true时禁用/启用XamCheckEditor,那么你需要做的就是创建一个带有直接连接到AllowEdit的绑定的样式。
<local:NullableBooleanConverter x:Key="converter"/>
<Style TargetType="{x:Type igEditors:XamCheckEditor}" >
<Setter Property="IsEnabled" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type igDP:CellValuePresenter}},
Path=Field.Settings.AllowEdit, Converter={StaticResource converter}}"/>
</Style>
由于XamCheckEditor位于Field的每个单元格内,这意味着它位于CellValuePresenter中。您可以使用RelativeSource绑定来访问它,然后访问它的属性。其中一个属性是它所属的领域。所以知道这一点,你可以直接绑定到AllowEdit。
现在AllowEdit是一个可以为空的布尔值(bool?),默认为null,因此您需要使用转换器来确保数据正确地传递给XamCheckEditor。
public class NullableBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// If value is null then we really mean true.
if (value == null)
return true;
// value is not null so it's either true or false.
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
现在你需要做的只是设置你原来做的AllowEdit属性,它会自动更新XamCheckEditor。