我想将 WPF 中控件的可见性属性绑定到布尔值。 我写了一个基于
IValueConverter
的转换器:
namespace MyApp.Converter
{
using System;
using System.Windows.Data;
public class BoolToVisibilityConverter : IValueConverter
{
public Object Convert(Object value, Type targetType, Object parameter, System.Globalization.CultureInfo culture)
{
if ((Boolean)(value)==true)
{
return "Visible";
}
return "Collapsed";
}
public Object ConvertBack(Object value, Type targetType, Object parameter, System.Globalization.CultureInfo culture)
{
...
}
}
}
并尝试了两种方法:在 App.xaml 和 Window 本身的 Window.Resources 中定义转换器:
xmlns:Converters="clr-namespace:MyApp.Converter"
...
<Window.Resources>
<Converters:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
</Window.Resources>
App.xaml 中的替代方案:
xmlns:Converters="clr-namespace:MyApp.Converter"
...
<Application.Resources>
<Converters:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
</Application.Resources>
使用转换器来编译可见性属性 - 但转换器永远不会被调用,因此可见性永远不会改变:
<Label Visibility="{Binding ShowCirle, Converter={StaticResource BoolToVisibilityConverter}}"/>
绑定本身似乎没问题 - 因为标签中 ShowCircle 的输出正确更新:
<Label Content="{Binding ShowCircle}"></Label>
那么,我错过了什么?构建编译没有错误,启动,但绑定仅更新字符串(用于调试目的),但不更新可见性 - 并且转换器本身的断点永远不会被命中。
您的转换器不应返回
string
,而应返回 Visiblity.Visible
或 Visibility.Collapsed
。
要检查绑定是否正确,请在调试时查看输出窗口。如果您在 Property-Name 中看到 Binding-Error(20,40 不确定是哪一个),那么您的绑定有问题。也许只是属性的拼写错误。