2010-12-31 4 views
2

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

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

Каков правильный способ?

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

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

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

+1

Walker: Не помещайте 'Привет/Спасибо/Я noob' в вашем вопросе , Они не влияют на ответ или ответчика. – decyclone

ответ

1

Правильный подход действительно зависит от сложности задачи. Достаточно простой способ сделать это - создать объект модели представления при запуске приложения и поместить его в словарь ресурсов приложения, а затем создать конструктор каждого Page, чтобы установить этот объект DataContext. Затем вы можете привязать элементы управления на своих страницах к свойствам этого объекта, который по существу является контекстом данных всего набора страниц.

Например, на странице 1 у вас может быть набор радиокнопок, привязанных к набору логических свойств в модели представления. Page 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"); 
     } 
    } 
}