正しいアプローチは、実際には問題の複雑さに依存します。アプリケーションの起動時にビューモデルオブジェクトを作成し、それをアプリケーションのリソースディクショナリに入れてから、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>
あり、これは動作しませんというシナリオがたくさんありますが、マルチパートウィザードの比較的単純なケースでそれはあなたが望むものになる可能性が高いです。
ラジオボタンにバインドすると、デザインに問題が発生します。グループの3つのラジオボタンのプロパティーを3つのブール値のプロパティにバインドして各ボタンをクリックすると、ソースのバインドされた値がすべてTrueに設定されます。これは、グループ内のラジオボタンがチェックされると、グループ内の他のボタンのIsChecked
値を明示的にクリアしてバインドを解除するためです。これには(ある種の)良い理由がありますが、それがそこにあるかどうかわからない場合は、多くの時間を費やすことができます。バインドされたラジオボタンを実装する方法には、独自のグループにそれぞれ1を入れて、あなたのビューモデルで、例えば、トグルを処理することです:
<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");
}
}
}
ウォーカー:こんにちは/おかげで/私はあなたの質問でnoob'午前 '置くことは避けてください。回答や回答者には影響しません。 – decyclone