2 VM'а в рамках одного окна

Предположим, что у меня есть класс, который внутри себя содержит 2 объекта, которые описывают конфигурацию:

  1. Конфигурация серверной части
  2. Конфигурация клиентской части

И у каждого класса есть свои поля и т д.

Да, я могу все это засунуть в одну VM, но она имхо будет большой и хотелось бы ее поделить на 2 VM'а, но чтобы конфигурация была в рамках одного окна.

Как можно решить данную задачу? Есть ли какие-нибудь контролы в WPF, которые поддерживают разные контексты?


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

Автор решения: VladD

А в чём проблема?

У вас выходит такая VM:

class MainVM : VM
{
    public ServerConfigurationVM ServerConfiguration { get; }
    public ClientConfigurationVM ClientConfiguration { get; }
    // остальное
}

И такой XAML окна настроек:

<Window x:Class="Test.SettingsWindow" ...>
    <Grid>
        <ServerConfigurationControl DataContext="{Binding ServerConfiguration}"/>
        <ClientConfigurationControl DataContext="{Binding ClientConfiguration}"/>
    </Grid>
</Window>

Если не хотите писать отдельные UserControl'ы для серверной и клиентской конфигурации, можно переназначить DataContext для поддерева:

<Window x:Class="Test.SettingsWindow" ...>
    <Grid>
        <Grid DataContext="{Binding ServerConfiguration}">
            <!-- тут UI для показа конфигурации сервера -->
        </Grid>
        ...
    </Grid>
</Window>
→ Ссылка