Переключение между темами оформления в паттерне MVVM

Задача: в приложении предполагается несколько схем оформления, нужно настроить переключение между ними, придерживаясь паттерна MVVM. Изначальный план был сделать несколько отдельных ResourceDictionary в отдельных файлах, а потом переключаться между ними по триггеру. Примерно как-то вот так я это представлял :

<Window.Resources>
    <ResourceDictionary x:Key="DayStyleDictionary">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Style/StyleDictionaryDay.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    <ResourceDictionary x:Key="NightStyleDictionary">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Style/StyleDictionaryNight.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>
<Window.Triggers>
    <DataTrigger Binding="{Binding FlagsManager.AppState}" Value="Day">
        <Setter Property="Resources" Value="{StaticResource DayStyleDictionary}" />
    </DataTrigger>
    <DataTrigger Binding="{Binding FlagsManager.AppState}" Value="Night">
        <Setter Property="Resources" Value="{StaticResource NightStyleDictionary}" />
    </DataTrigger>
</Window.Triggers>

Но похоже так сделать невозможно? Как правильно организовать переключение между темами в рамках паттерна MVVM?

Нашёл вариант с вписыванием ResourceDictionary в Application.Resources и перезаписывание его значения через метод вызываемый в сеттере свойства отвечающего за то, какая тема сейчас выбрана. В принципе вариант рабочий, но выглядит не очень элегантно. Это хорошее решение или же есть какой-то ещё вариант?


Ответы (0 шт):