在 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 属性。
我正在使用 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 属性。