【发布时间】:2015-11-10 17:11:49
【问题描述】:
我正在尝试设置和绑定ToggleButton,以更改DataGrid 中列的可见性。 I am following this post 问题是转换器永远不会触发,我不知道为什么。
我的代码如下:
<DataGridTemplateColumn Header="My Header"
Visibility="{Binding IsChecked,
ElementName=AdvancedToggleButton,
Converter={StaticResource booleanToVisaulConverter}}" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<!-- Elements removed for brevity-->
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
转换器是这个
<Page.Resources>
<local:BooleanToVisaulConverter x:Key="booleanToVisaulConverter" />
</Page.Resources>
后面有代码;
public class BooleanToVisaulConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool visibility = (bool)value;
return visibility ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
Visibility visibility = (Visibility)value;
return (visibility == Visibility.Visible);
}
}
编辑:@Breeze 发现booleanToVisaulConverter 实际上并未指向BooleanToVisaulConverter 的错误。此问题已修复,但仍未触发。要求提供切换按钮代码;
<ToggleButton Name="AdvancedToggleButton" Content="Advanced" />
【问题讨论】:
-
如果错误不是您在静态资源中使用 BooleanToVisibiltyConverter 而不是 BooleanToVisaulConverter,请分享 advancedToggleButton 的声明
-
@Breeze 修复了 BooleanToVisaulConverter,见上文
-
框架中已经有一个 BooleanToVisibilityConverter,仅供参考。您应该使用像 Snooper 这样的工具来检查可视化树在运行时是否存在绑定错误。
-
为您找到了一种解决方法,非常奇怪的是,所有这些都指出您不能以“非野蛮”的方式显示隐藏列......或者我可能没有找到。一分钟后将返回一些代码。
标签: c# wpf mvvm ivalueconverter