带有converterParameter的Datagrid单元格样式
Posted
技术标签:
【中文标题】带有converterParameter的Datagrid单元格样式【英文标题】:Datagrid cell style with converterParameter 【发布时间】: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
。
【参考方案1】:
您应该使用DisplayIndex
或Header
,并相应地设置ConverterParameter
。
<Style x:Key="CellStyle" TargetType="x:Type DataGridCell">
<Style.Triggers>
<DataTrigger Binding="Binding Column.DisplayIndex, RelativeSource=RelativeSource Self" Value="0">
<Setter Property="IsEnabled"
Value="Binding
Path=Item,
Converter=StaticResource ResourceKey=IsEnabledCellConverter,
ConverterParameter=0,
RelativeSource=RelativeSource AncestorType=x:Type DataGridRow" />
</DataTrigger>
<DataTrigger Binding="Binding Column.DisplayIndex, RelativeSource=RelativeSource Self" Value="1">
<Setter Property="IsEnabled"
Value="Binding
Path=Item,
Converter=StaticResource ResourceKey=IsEnabledCellConverter,
ConverterParameter=1,
RelativeSource=RelativeSource AncestorType=x:Type DataGridRow" />
</DataTrigger>
</Style.Triggers>
</Style>
请说明这是否解决了您的问题。
【讨论】:
@ebelair 100% 它正在工作,具有适当的 ConverterParameter。我在发布前检查。 @ebelair 如果合适,你可以来聊天chat.***.com/rooms/18165/wpf 不,没关系,它正在工作。抱歉,我忘记在第一列和第二列添加 CeelStyle ^^" 但我不明白为什么这是不可能的:ConverterParameter=Column.DisplayIndex?会简单很多 @ebelair 这是因为 XAML 语法规则。你不能在任何地方写任何东西。以上是关于带有converterParameter的Datagrid单元格样式的主要内容,如果未能解决你的问题,请参考以下文章