我有一个带有CarViewModel
+ view
( UserControl
) 的应用程序。我想要实现的是在绑定的DataContextCar.Status
发生变化时改变画笔的样式。
我发现了如何更改画笔(在视图后面的代码中):
private void LoadThemeResources(bool isPrepareMode)
{
if (isPrepareMode)
{
Uri themeUri = new Uri(@"/../Resources/MyBrushes.Light.xaml", UriKind.Relative);
ResourceDictionary themeDictionary = Application.LoadComponent(themeUri) as ResourceDictionary;
this.Resources.MergedDictionaries.Add(themeDictionary);
}
else
{
this.Resources.MergedDictionaries.Clear();
}
}
默认情况下,应用程序和所有内容都有一个分布在多个文件中的深色主题。这MyBrushes.Light
会覆盖其中的一些。
但我不知道如何以 MVVM 友好的方式基于 ViewModel 中的属性更改来执行 LoadThemeResources 函数。
我可以在视图后面的代码中做:
var vm = (CarViewModel) DataContext;
vm.Car.PropertyChanged += HandleStatusChanged;
但这是 和 之间的紧密View
耦合ViewModel
。
我也可以通过 Messenger(来自 MVVM Light)来做到这一点,但这会在整个应用程序中进行广播,而且似乎有点过分了。
还有其他方法吗?还是首选方式?