XAML WPF中的可见性绑定的IValueConverter从不调用

cnwbcb6i  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(169)

我想将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>


我错过了什么?构建编译时没有错误,启动,但绑定只更新字符串(用于调试目的),而不更新可见性-转换器本身中的断点永远不会命中。

x8goxv8g

x8goxv8g1#

您的转换器不应返回string,而应返回Visiblity.VisibleVisibility.Collapsed
要检查您的绑定是否正确,请在调试时查看输出窗口。如果您看到一个绑定错误(20,40不确定是哪一个)与您的属性名称,那么您的绑定有问题。也许只是属性的拼写错误。

相关问题