簡體   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