我遇到以下代码的问题。如果ivalueconverter(LengthConverter)决定第一个参数" Binding Path = Length"我试图用数据触发器做的是显示空白。在这种情况下小于ConverterParameter 3。
因此,对于那些真实的行,我会得到空白文本。否则我会得到我的数据。
问题如下,如果在Binding下面的第1行=" {Binding Data1}"省略,数据触发器工作正常,但是我无法编辑单元格值并让它触发Data1的设置器来更新数据。如果我有以下内容,我可以编辑数据,但触发器不再有效...
有什么方法可以让数据输入和数据触发工作吗?
<DataGridTextColumn Header="MyData1" Binding="{Binding Data1}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Text" Value="{Binding Data1, Mode=TwoWay}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Length, Converter={StaticResource LengthConverter}, ConverterParameter=3}" Value="True">
<Setter Property="Text" Value="{x:Null}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
谢谢!
答案 0 :(得分:0)
我建议使用DataGridTemplateColumn
自定义CellTemplate
和CellEditingTemplate
,如下所示:
<DataGridTemplateColumn Header="MyData1">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Data1, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding Path=Data1}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Data1, Converter={StaticResource LengthConverter}, ConverterParameter=3}" Value="True">
<Setter Property="Text" Value="{x:Null}" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
您的转换器现在应该指向Data1.Length:
LengthConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((value as string)?.Length??0) > 3;
}
}
在更改文本时,Length属性本身不会获得PropertyChanged事件。因此直接绑定到字符串Data1 ......