2016-11-12 16 views
0

MainViewModel を持つMainWindow.xamlページがあり、1つのUserControlを使用して2つのSidePanelsを追加したいのですが、異なるViewModelsを持つ必要があります。 XAMLで各ユーザーコントロールのためのDataContextとして、このプロパティにオブジェクトを設定する方法1つのUserControlに異なるViewModelを割り当てます。

public MainViewModel() 
{ 
    LeftSidePanel = new SidePanelViewModel(PanelSides.Left); 
    RightSidePanel = new SidePanelViewModel(PanelSides.Right); 
} 

: MainViewModelはalredy作成SidePanelViewModelsと2つの特性を持っていますか?このdoesnotの作品のような 何か:私はそれを行う方法を考えて、すべての脳を破った

<Window DataContext="{Binding MainViewModel, Source={StaticResource Locator}}"> 
... 
    <Grid Visibility="{Binding RightSidePanel.PanelVisibility}" Grid.Column="4" Grid.Row="2" > 
     <v:SidePanelViev DataContext="{Binding RightSidePanel}" /> 

    </Grid> 
</Window> 

PSを助けてください。 または私はContentControlに

<Window DataContext="{Binding MainViewModel, Source={StaticResource Locator}}"> 
... 
    <Grid Visibility="{Binding RightSidePanel.PanelVisibility}" Grid.Column="4" Grid.Row="2" > 
     <ContentControl Content="{Binding RightSidePanel}"></ContentControl> 

    </Grid> 
</Window> 

の内容としてSidePanelViewModelの両方のインスタンスを追加し、すべてのクラスをバインドするものを新しいWindow.Resourceを追加することによって、私の問題を解決した

+1

あなたの問題は何ですか?あなたが示したことはうまくいくはずです。 – dkozl

+0

しかし、私はユーザーコントロールの任意のプロパティをバインドしようとしているとき、ユーザーコントロールのプロパティウィンドウはデータコンテキストを持たないことを示します –

+1

'UserControl'コンストラクタで' DataContext = this '? – dkozl

答えて

1

...同じ目標を達成するために、他のアプローチを提案してください型SidePanelViewModelがSidePanelViev

<Window.Resources> 
    <DataTemplate DataType="{x:Type vm:SidePanelViewModel}"> 
     <v:SidePanelViev></v:SidePanelViev> 
    </DataTemplate> 
</Window.Resources> 

これは動作しますが、誰かがより良いアイデアを持っている場合は、それらを掲示することを躊躇しないでくださいを用いて可視化するために、私は私の決定が良好であることを確認していない1