У меня есть приложение, в котором есть CarViewModel
+ view
(UserControl
). Чего я хочу добиться, так это изменить стиль кистей при изменении связанного DataContext Car.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
перезаписывает некоторые из них.
Но я понятия не имею, как я могу выполнить функцию LoadThemeResources на основе изменения свойства в ViewModel удобным для MVVM способом.
Я могу сделать в коде представления:
var vm = (CarViewModel) DataContext;
vm.Car.PropertyChanged += HandleStatusChanged;
Но это тесная связь между View
и ViewModel
.
Я также могу сделать это через Messenger (из MVVM Light), но это транслируется по всему приложению и кажется излишним.
Есть ли другой способ? Или предпочтительный способ?