[英]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.