новичок wpf дизайн вопрос - PullRequest
2 голосов
/ 31 декабря 2010

Я использую NavigationWindow, на первом экране пользователь должен выбрать несколько radio button и нажать рядом со следующим экраном.

Что касается выбора radio button на следующих экранах, я должен поставить всесоответствующие картинки и придают всем кнопкам соответствующие функции.

Как правильно это сделать?

В winforms я бы передал на следующем экране подрядчику значение радиокнопкии через операторы if else делают все в подрядчике и в функциях события.

Я уже узнал о привязке данных.

Можете ли вы шаг за шагом объяснить, как я должен реализовать эту вещь ...

1 Ответ

1 голос
/ 01 января 2011

Правильный подход действительно зависит от сложности проблемы.Довольно простой способ сделать это - создать объект модели представления при запуске приложения и поместить его в словарь ресурсов приложения, а затем с помощью конструктора каждого 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");
       }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...