在Prism应用程序中绑定SolidColorBrush

时间:2016-04-28 16:37:08

标签: c# wpf mvvm data-binding prism-6

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

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

然后在我看来,我使用:prism:ViewModelLocator.AutoWireViewModel="True"将它连接到相应的视图模型。我也在画布上使用绑定(但这可能是一个网格或其他任何东西,我都不在乎),像这样:<Canvas Background="{Binding B}" Margin="5" />。作为旁注,我有其他元素绑定到其他属性,如绑定到字符串以显示日期的文本块,并且工作正常。

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

当我运行我的应用程序时,画布保持白色...但是我很确定B包含画笔,因为我在视图模型的构造函数中输出其内容(Console.WriteLine("Color: {0}", B.ToString()); 0并且我得到了正确的价值。

我做错了什么?

由于

2 个答案:

答案 0 :(得分:0)

表达式

accept

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

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

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

答案 1 :(得分:-1)

请你可以使用更简单的方法来实现这个,如下面的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" />

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

注意上述绑定中的条件是condtion将要更改颜色。它应该作为视图模型中的属性进行declay。

希望这会有所帮助