【发布时间】:2015-10-10 06:30:43
【问题描述】:
我有一个具有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)来实现,但这会在整个应用程序中广播,似乎有点过头了。
还有其他方法吗?还是首选方式?
【问题讨论】:
标签: c# wpf mvvm mvvm-light fody-propertychanged