2011-08-04 7 views
1

Stackについての私の最初の質問。私に悪い説明をあらかじめ許してください。カスタムUserControlからネストされたコントロールのバインド可能なプロパティを簡単に公開できますか?

私は最初のMVVMアプリケーション(Silverlight)を作成しています。ナビゲーションアイテムを表示するListBoxを含むカスタムユーザーコントロールがあります。このコントロールはメインのxamlページに配置されています。特にカスタムコントロールのためのビューモデルを持つコンポジットビューモデル(メインページビューモデル)を作成する必要があるかどうか、またはバインドする必要があるListBoxプロパティを昇格する方法があるかどうかはわかりません。

XAMLを介して、私のメインページのビューモデルへのカスタムコントロール内のリストボックスのItemsSourceプロパティをバインドする方法はわかりません。基本的には、メインページビューモデルを使用してカスタムコントロールをバインドしようとしたときの設計上の意思決定に疑問を呈しています。

私がこれまで行ってきたことは、カスタムコントロールの依存関係プロパティを作成し、その依存プロパティをListBoxプロパティにトンネリングすることです。私はItemsSourceのこのメソッドで成功しましたが、SelectedItemに問題があります。

SelectedItemが機能するようになっても、それでもが間違っていると感じる。事前に助言をいただきありがとうございます。

+0

ようこそ。私はこれがかなり良い最初の質問だと思います。 – AnthonyWJones

答えて

1

UserControlは、直接設定していない限り、親コントロールからDataContextを継承する必要があります。その後、UserControlからビューモデルのプロパティにバインドできます。

UserControlに具体的にViewModelを作成したい場合は、それを行うこともできます。メインViewModelのプロパティとして公開し、MainPageでバインドします。例:ビューの

public class MainViewModel 
{ 
    public ChildViewModel ChildInfo { get; private set; } 
} 

そして:

<Grid> 
    ... 
    <lcl:ChildView DataContext="{Binding ChildInfo}" /> 
    ... 
</Grid> 

あなたChildViewModelその後、あなたはListBoxにバインドするSelectedItemなどのプロパティが含まれます。

+0

ありがとうございます!私はカスタムコントロールが親のDataContextセットを継承することに気付かなかった。 –

関連する問題