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();
    }
}

それを機能させるには、 a を使用する必要がありますSolidColorBrush

私の環境では問題なく動作していますが、何か問題がありましたらお知らせください。

于 2012-06-27T21:28:38.597 に答える