Правильный подход действительно зависит от сложности проблемы.Довольно простой способ сделать это - создать объект модели представления при запуске приложения и поместить его в словарь ресурсов приложения, а затем с помощью конструктора каждого Page
установить DataContext
для этого объекта.Затем вы можете привязать элементы управления на своих страницах к свойствам этого объекта, который по сути является контекстом данных для всего набора страниц.
Например, на странице 1 у вас может быть набор переключателей, связанных снабор логических свойств в модели представления.Элементы управления страницы 2 могут быть стилизованы для отображения информации на основе настроек этих свойств, например:
<DockPanel Visibility="Collapsed">
<DockPanel.Style>
<Style TargetType="DockPanel">
<Style.Triggers>
<DataTrigger Binding="{Binding BooleanProperty1}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DockPanel.Style>
<!-- controls that should appear if BooleanProperty1 is True go here -->
</DockPanel>
Существует множество сценариев, для которых это не сработает, но в относительно простом случае с несколькими частямиМастер, скорее всего, это то, что вам нужно.
Не связанная с этим заметка, но с тех пор, как вы ее подняли: привязка к переключателям имеет неприятную небольшую проблему с дизайном.Если вы свяжете свойства IsChecked
трех переключателей в группе с тремя логическими свойствами, а затем нажмете на каждую кнопку, вы обнаружите, что для всех связанных значений в источнике установлено значение True.Это происходит потому, что когда переключатель в группе проверяется, он явно сбрасывает значение IsChecked
на других кнопках в группе, и это нарушает привязку.Есть (вроде) веские причины для этого, но на это можно потратить много времени, если вы не знаете, что это там.Способ реализации связанных переключателей состоит в том, чтобы поместить каждую из них в отдельную группу и обработать переключение в вашей модели представления, например:
<RadioButton Group="BooleanProperty1" IsChecked="{Binding BooleanProperty1, Mode=TwoWay}"/>
<RadioButton Group="BooleanProperty2" IsChecked="{Binding BooleanProperty2, Mode=TwoWay}"/>
<RadioButton Group="BooleanProperty3" IsChecked="{Binding BooleanProperty3, Mode=TwoWay}"/>
public bool BooleanProperty1
{
set
{
if (value != _BooleanProperty1)
{
_BooleanProperty1 = value;
if (value)
{
BooleanProperty2 = false;
BooleanProperty3 = false;
}
OnPropertyChanged("BooleanProperty1");
}
}
}