0

我正在使用 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为 binding创建了相应的属性public SolidColorBrush B = (SolidColorBrush)Application.Current.Resources[Status.notViewed];

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

我究竟做错了什么?

谢谢

4

2 回答 2

0

表达方式

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

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

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

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

于 2016-04-28T19:11:33.970 回答
-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 作为资源

注意上述绑定中的条件是想要更改颜色的条件。它应该作为视图模型中的属性延迟。

希望这会有所帮助

于 2016-04-28T17:02:00.127 回答