繁体   English   中英

没有为DataGridTextColumn的可见性调用IValueConverter

[英]IValueConverter not being called for Visibility of a DataGridTextColumn

我有一个DataGrid ,它将基于CheckBox显示列。 我知道我将需要创建一个IValueConverter来实现对Visibilitybool 问题是我的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来实现对Visibilitybool 问题是我的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM