【发布时间】:2017-01-28 15:10:17
【问题描述】:
如何在数据网格单元格的样式设置器中使用converterParameter? 我需要知道转换器中的元素名称或属性名称。
xaml:
<Window.Resources>
<view:IsEnabledCellConverter x:Key="IsEnabledCellConverter"/>
<Style x:Key="CellStyle" TargetType="{x:Type DataGridCell}">
<Setter Property="IsEnabled"
Value="{Binding
Path=Item,
Converter={StaticResource ResourceKey=IsEnabledCellConverter},
ConverterParameter={?????}}"
RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}} />
</Style>
.../...
<Datagrid>
<DataGrid.Columns>
<DataGridTextColumn x:Name="Design"
CellStyle="{StaticResource CellStyle}"
Value="{Binding Path=Design}"/>
<DataGridTextColumn x:Name="FooBar"
CellStyle="{StaticResource CellStyle}"
Value="{Binding Path=Foobar}"/>
</DataGrid.Columns>
</Datagrid>
转换器类:
class IsEnabledCellConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string p = (string)parameter;
MyItem item = (MyItem)value;
switch (p)
{
case "Design":
return string.IsNullOrEmpty(item.Reference);
break;
case "FooBar":
return item.Something != true;
break;
default:
return true;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
编辑:我添加了一些细节以了解需求。 所以我所有的列 IsEnabled 道具都绑定了这个全局转换器,原因有两个:
- 更容易维护
- 需要根据其他项目值的值启用某些列。
【问题讨论】:
-
在您的问题中,您要查找哪个元素名称或属性名称。
-
我想检索 DatagridTextColumn 的 x:name 或 Binding Path 属性,例如“Design”
-
这样做的任何充分理由。如果是,您可能必须使用
AttachedProperty。