我正在使用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并且我得到了正确的价值。
我做错了什么?
由于
答案 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。
希望这会有所帮助