2012-04-04 16 views
0

WPFの新機能です。私は、ユーザーが多くのデータを書き込む必要があり、フォームのいくつかの部分が繰り返される関数(初期化と呼ぶ)を持つアプリケーションを構築しようとしています。かなり長いウィザードを備えた従来のアプリケーションを書き直していますが、折りたたみパネルを次のページや前のページではなく1つのウィンドウで使用しています。また、いくつかの部分が繰り返される。ユーザーが項目の数を指定することができます。3と指定すると、それぞれの設定情報を入力する必要があるため、これらのコントロールを3回繰り返す必要があります。 http://msdn.microsoft.com/en-us/magazine/dd419663.aspx子コントロール内でのWPFデータバインディング

古いウィザードは私が破る4つのユーザーコントロールが含まれている1つのユーザーコントロール(初期化)を持っているつもりだので、約4ページを持っていた:私はMVVMを使用していますし、ここでこの例を使用しています

xamlを少しアップ。

これまでのところ、私は初期化を持っている(そのViewModelには、上記の例のように、ワークスペースのViewModelから継承)と、それが動作している一人の子供が含まれます。私はそれぞれの子のためにとIntialisation用に別のviewmodelsを持つことになります

<Expander ExpandDirection="Down" Header="ChildOne"> 
<view:ChildOne /> 
</Expander> 

をこれは私の問題に私をもたらします。私が午前 問題はChildOneが、私はそうのようにバインドしようとしているドロップダウンが含まれていることである。

<ComboBox x:Name="textMessageTypeCmb" ItemsSource="{Binding Path=TextMessageSelectionOptions, Mode=OneTime}"/> 

TextMessageSelectionOptionsはChildOneのビューモデルの公共財産です。これにより、エラーは発生しませんが、空のドロップダウンが発生します。そのプロパティゲッターは決して呼び出されません。そのプロパティゲッターコードをInitialisationのViewModelに移動すると機能しますが、私はコードを管理しやすい塊にして、ChildOneのViewModelにハットコードを戻したいと思います。私のメインウィンドウで、私はこの

ChildOneViewModel ws = this.Workspaces.FirstOrDefault(vm => vm is ChildOneViewModel) as ChildOneViewModel; 

などの代わりに初期化の作業領域としてChildOneを作成する場合にも、誰もが、私は(いくつかのユーザーコントロールにそれを分割することによって)適切なアプローチを取っているかどうかと、私が必要なものをアドバイスすることができ作品この仕事をするためにバインディングで行うのですか?私は本当にこれのどれかをまだ理解していません。

答えて

1

ChildOneビューのDataContextはまだこの初期化VMです。

あなたはそれをChildOneViewModelオブジェクト

... 
<view:ChildOne DataContext={Binding PropertyReturnsChildOneViewModellObject/> 
... 

にビューDatacontextを結合するか、またはコンボボックスのItemsSourceプロップのパスを指定することができます。

<ComboBox x:Name="textMessageTypeCmb" ItemsSource="{Binding Path=PropertyReturnsChildOneViewModellObject.TextMessageSelectionOptions, Mode=OneTime}"/> 

注:PropertyReturnsChildOneViewModellObjectは、Initialization vmのプロパティです。

+0

どちらも機能しますが、私はchildviewmodelをプロパティにバインドする必要があるいくつかのコントロールが存在するため、前者を選択しました。ありがとうございます - 私はまだ投票するのに十分な評判はありません。 – Nix

関連する問題