WPF 中用于可见性绑定的 IValueConverter 永远不会被调用

问题描述 投票:0回答:1

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

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

c# wpf xaml ivalueconverter
1个回答
0
投票

您的转换器不应返回

string
,而应返回
Visiblity.Visible
Visibility.Collapsed

要检查绑定是否正确,请在调试时查看输出窗口。如果您在 Property-Name 中看到 Binding-Error(20,40 不确定是哪一个),那么您的绑定有问题。也许只是属性的拼写错误。

© www.soinside.com 2019 - 2024. All rights reserved.