[英]IValueConverter not being called for Visibility of a DataGridTextColumn
我有一个DataGrid
,它将基于CheckBox
显示列。 我知道我将需要创建一个IValueConverter
来实现对Visibility
的bool
。 问题是我的BoolToVisualConvertor
甚至没有被调用。 不知道为什么。 这是我所做的:
public class BoolToVisualConvertor : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
try
{
if (value == null) return System.Windows.Visibility.Collapsed;
bool data = (bool)value;
if (data) return System.Windows.Visibility.Visible;
return System.Windows.Visibility.Collapsed;
}
catch (Exception x)
{
return System.Windows.Visibility.Collapsed;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return false;
}
}
然后在XAML中:
<Page.Resources>
<local:BoolToVisualConvertor x:Key="BoolToVisaul" />
</Page.Resources>
CheckBox
:
<CheckBox Name="MyCheckBox" IsChecked="True" />
DataGridTextColumn
:
<DataGridTextColumn Header="MyData" Binding="{Binding Path=MyData}" Visibility="{Binding IsChecked, ElementName=MyCheckBox, Converter={StaticResource BoolToVisaul}}" >
我必须缺少一些简单的东西。 谢谢!
编辑:在复制粘贴中有一个错误,我有一个DataGrid
将显示基于CheckBox
列。 我知道我将需要创建一个IValueConverter
来实现对Visibility
的bool
。 问题是我的BoolToVisualConvertor
甚至没有被调用。 不知道为什么。 这是我所做的:
public class BoolToVisualConvertor : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
try
{
if (value == null) return System.Windows.Visibility.Collapsed;
bool data = (bool)value;
if (data) return System.Windows.Visibility.Visible;
return System.Windows.Visibility.Collapsed;
}
catch (Exception x)
{
return System.Windows.Visibility.Collapsed;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return false;
}
}
然后在XAML中:
<Page.Resources>
<local:BoolToVisualConvertor x:Key="BoolToVisaul" />
</Page.Resources>
CheckBox
:
<CheckBox Name="MyCheckBox" IsChecked="True" />
DataGridTextColumn
:
<DataGridTextColumn Header="MyData" Binding="{Binding Path=MyData}" Visibility="{Binding IsChecked, ElementName=MyCheckBox, Converter={StaticResource BoolToVisaul}}" />
我必须缺少一些简单的东西。 谢谢!
编辑:复制和粘贴中有错误,现在可以正确读取
编辑2:做更多的测试似乎问题出在DataGrid中。 像这样在DataGrid外部创建一个测试TextBlock;
<TextBlock Text="{Binding Path=MyValue}" Visibility="{Binding IsChecked, ElementName=MyCheckBox, Converter={StaticResource BoolToVisaul}}" />
那很好。 现在让我真正困惑的是,如果我这样做:
<DataGridTextColumn Header="MyData" Binding="{Binding Path=MyData}" Visibility="Collapsed" />
这样可行...
您必须使用样式。 尝试这个:
<DataGridTextColumn Header="MyData" Binding="{Binding MyData}">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
<Style.Setters>
<Setter Property="Visibility" Value="{Binding IsChecked, ElementName=MyCheckBox, Converter={StaticResource BoolToVisualConvertor}}" />
</Style.Setters>
</Style>
</DataGridTextColumn.HeaderStyle>
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
<Style.Setters>
<Setter Property="Visibility" Value="{Binding IsChecked, ElementName=MyCheckBox, Converter={StaticResource BoolToVisualConvertor}}" />
</Style.Setters>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.