【问题标题】:IValueCOnverter Not WorkingIValueCONverter 不工作
【发布时间】:2010-02-11 13:53:10
【问题描述】:

在谷歌上搜索这个问题已经好几个小时了,但看不到我哪里出错了。

我有以下转换器,它只返回 Brushes.Red(也尝试过 Colors.Red),但仍然没有运气。

public class ColorConverter : IValueConverter
{
    private static ColorConverter instance = new ColorConverter();
    public static ColorConverter Instance
    {
        get
        {
            return instance;
        }
    }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return Brushes.Red;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new Exception("The method or operation is not implemented.");
    }
}

现在在我的 xaml 中,我有以下代码:

<StackPanel Orientation="Vertical">
    <TextBlock Text="{Binding Value}" TextAlignment="Center" Foreground="{Binding Path=color, Converter={x:Static local:ColorConverter.Instance}}" Margin="2"/>
</StackPanel>

我在顶部设置了以下命名空间:

xmlns:local="clr-namespace:Dashboard"

现在我有以下绑定到堆栈面板的类:

public class MyClass : INotifyPropertyChanged
{
    public String Value;
    public Color color;

    // Declare the PropertyChanged event
    public event PropertyChangedEventHandler PropertyChanged;
    public void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

数据绑定(值)工作得非常好,但是转换器不想启动,我试图在 covnerter 的 Convert 方法中设置一个断点,但是在调试时不会触发,它看起来就像如果我的调试器没有被调用。

任何人都可以对此有所了解吗?

【问题讨论】:

    标签: c# data-binding converter ivalueconverter


    【解决方案1】:

    我很惊讶你说绑定本身可以工作,因为“值”和“颜色”是字段,绑定到字段不应该工作。

    【讨论】:

    • 是的,我什至懒得看他们的声明,因为它听起来像一切,但转换器正在工作。 :)
    【解决方案2】:

    嗯,这就是我在项目中的做法。我修改了我的代码以反映您正在尝试做的事情。我希望它有所帮助。我无法回答为什么你的单例方法行不通。

    类:

    public class ColorConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return Brushes.Red;
        }
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new Exception("The method or operation is not implemented.");
        }
    }
    

    在我的 UserControl.Resources 元素中:

    <UserControl.Resources>
        <local:ColorConverter x:Key="MyColorConverter" />
    </UserControl.Resources>
    

    StackPanel 元素:

    <StackPanel Orientation="Vertical">
        <TextBlock Text="{Binding Value}" TextAlignment="Center" Foreground="{Binding Path=color, Converter={StaticResource MyColorConverter}}" Margin="2"/>
    </StackPanel>
    

    另外,您是否检查了“输出”窗口以查看是否有任何错误?您还应该阅读Bea Stollnitz's article on debugging databindings。她实际上有一个关于 IValueConverters 的特定部分,可能有一天会派上用场。

    【讨论】:

    • 谢谢!进入我的输出窗口后发现问题。我不知道要使变量成为属性,您必须添加 { set;得到; } 给它。所以我没有在那里,输出抱怨它找不到“颜色”属性。非常感谢您的帮助,并感谢您的链接。添加到收藏夹!
    • 啊,是的,您确实使用了字段而不是属性。我以前犯过这个错误(显然又犯了)。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2015-06-17
    相关资源
    最近更新 更多