1

我有一个列表框使用的 DataTemplate:

<local:BooleanToFontColorConverter x:Key="boolToFontColor" />
<DataTemplate x:Key="ListBox_DataTemplateSpeakStatus">
    <Label Width="Auto">
            <TextBlock Name="MY_TextBlock" Text="Hello!" Foreground="{Binding Path=MY_COLOR, Converter={StaticResource boolToFontColor}}" />
    </Label>
</DataTemplate>

MY_COLOR 是以下代码:

    public class Packet_Class : INotifyPropertyChanged
    {
        private bool _my_color = false;
        public bool MY_COLOR { get { return _my_color; } 
                                       set { _my_color = value; RaisePropertyChanged("MY_COLOR"); } }
    }

然后在适当的时候设置属性,我认为它会触发 RaisePropertyChanged 函数

    myPacketClass.MY_COLOR = true;

而 boolToFontColor 正在“尝试”使用该位:

    public class BooleanToFontColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
                  CultureInfo culture)
    {
        if (value is Boolean)
        {
            return ((bool)value) ? new SolidColorBrush(Colors.Red) : new SolidColorBrush(Colors.Black);
        }

        return new SolidColorBrush(Colors.Black);
    }

    public object ConvertBack(object value, Type targetType, object parameter,
                              CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

当我将 MY_COLOR 的值从 true 更改为 false 时,反之亦然,我在运行时看不到文本前景色的可见变化。有没有人可以就我哪里出错提供建议?非常感谢并提前感谢您。

编辑:

一些额外的信息试图提供更清晰的信息。我在这样的 ListBox 中使用我的 DataTemplate:

<ListBox x:Name="MyUserList" ItemTemplate="{StaticResource ListBox_DataTemplateSpeakStatus}"  SelectionMode="Extended" />

在我的 WPF Window 元素中,我将我的本地命名空间设置为我的 mainwindow.xaml.cs 封装在的命名空间:

xmlns:local ="clr-namespace:My_NameSpace"
4

1 回答 1

3

RaisePropertyChanged 方法应引发接口中定义的 PropertyChanged 事件,如下所示:

public event PropertyChangedEventHandler PropertyChanged;
        protected void RaisePropertyChanged (string propertyName)
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }

转换器:

public class BooleanToFontColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
              CultureInfo culture)
    {
        if (value is Boolean)
        {
            return ((bool)value) ? new SolidColorBrush(Colors.Red) : new SolidColorBrush(Colors.Black);
        }

        return new SolidColorBrush(Colors.Black);
    }

    public object ConvertBack(object value, Type targetType, object parameter,
                              CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

您必须使用 aSolidColorBrush才能使其工作。

它适用于我的环境,如果您遇到任何问题,请告诉我。

于 2012-06-27T21:28:38.597 回答