在 Prism 应用程序中绑定 SolidColorBrush

Binding a SolidColorBrush in a Prism application

我正在使用 Prism 6 构建应用程序,但我对 MVVM、数据绑定和所有这些设计模式不熟悉。在应用程序中,我需要根据视图模型的某些属性的值显示不同的颜色。

为此,我在资源字典中有一些 SolidColorBrush,如下所示:<SolidColorBrush x:Key="{x:Static status:Status.notViewed}">#FFe74856</SolidColorBrush>

然后在我看来,我使用:prism:ViewModelLocator.AutoWireViewModel="True" 将其连接到相应的视图模型。我还在 canvas 上使用绑定(但它可以是网格或其他任何东西,我真的不在乎),如下所示:<Canvas Background="{Binding B}" Margin="5" />。作为旁注,我将其他元素绑定到其他属性,例如将文本块绑定到字符串以显示日期,并且效果很好。

现在,在我的视图模型中,我为绑定 public SolidColorBrush B = (SolidColorBrush)Application.Current.Resources[Status.notViewed];.

创建了相应的 属性 B

当我 运行 我的应用程序时, canvas 保持白色...但是我很确定 B 包含一个画笔,因为我在查看模型(Console.WriteLine("Color: {0}", B.ToString());0,我得到了正确的值。

我做错了什么?

谢谢

请您使用更简单的方法来实现这一点,就像下面的 IValueConverter

class ConditionToBackgroundConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if(value.ToString() == "Condition over here")
            {
                return new SolidColorBrush(System.Windows.Media.Colors.Aqua);
            }else
            {
                return new SolidColorBrush(System.Windows.Media.Colors.Blue);
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return null;
        }
    }

然后在你的绑定上你做这样的事情

<Canvas Background="{Binding Condition,Converter={StaticResource ConditionToBackgroundConverter }}" Margin="5" />

但不要忘记将 ConditionToBackgroundConverter 作为资源包含在您的 window.resource 或 app.xaml

注意上面绑定中的条件是要更改颜色的条件 for.It 应该在您的视图模型中衰减为 属性。

希望这会有所帮助

表达式

public SolidColorBrush B
    = (SolidColorBrush)Application.Current.Resources[Status.notViewed];

声明一个 public 字段,而不是 属性。 属性 看起来像这样:

public SolidColorBrush B { get; set; }
    = (SolidColorBrush)Application.Current.Resources[Status.notViewed];

WPF 中的数据绑定仅适用于 public 属性。