我想将WPF中控件的visibility属性绑定到一个布尔值。我写了一个基于IValueConverter
的Converter:
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本身的资源:
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>
型
将Converter用于visibility属性会编译-但转换器永远不会被调用,因此可见性永远不会更改:
<Label Visibility="{Binding ShowCirle, Converter={StaticResource BoolToVisibilityConverter}}"/>
型
绑定本身似乎没有问题-因为标签中ShowCircle的输出会正确更新:
<Label Content="{Binding ShowCircle}"></Label>
型
我错过了什么?构建编译时没有错误,启动,但绑定只更新字符串(用于调试目的),而不更新可见性-转换器本身中的断点永远不会命中。
1条答案
按热度按时间x8goxv8g1#
您的转换器不应返回
string
,而应返回Visiblity.Visible
或Visibility.Collapsed
。要检查您的绑定是否正确,请在调试时查看输出窗口。如果您看到一个绑定错误(20,40不确定是哪一个)与您的属性名称,那么您的绑定有问题。也许只是属性的拼写错误。