2010-12-31 21 views
2

私はNavigationWindowを使用し、最初の画面ではradio buttonを選択し、次の画面の横にあるを押してください。初心者のwpfデザインの質問

次の画面でradio buttonを選択すると、関連するすべての画像を配置し、すべてのボタンに関連する機能を追加する必要があります。

これを行う正しい方法は何ですか?

winformsで私は次の画面請負業者でラジオボタンの値を渡し、else文は請負業者とイベント機能のすべてを行います。

私は既にデータバインディングについて学びました。

あなたは私がこの事を実装する方法をステップバイステップで説明することができます....

+1

ウォーカー:こんにちは/おかげで/私はあなたの質問でnoob'午前 '置くことは避けてください。回答や回答者には影響しません。 – decyclone

答えて

1

正しいアプローチは、実際には問題の複雑さに依存します。アプリケーションの起動時にビューモデルオブジェクトを作成し、それをアプリケーションのリソースディクショナリに入れてから、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"); 
     } 
    } 
}