将不同的ViewModel分配给一个UserControl

时间:2016-11-12 18:56:08

标签: wpf xaml mvvm binding user-controls

我有MainWindow.xaml页面,带有MainViewModel 并且想要使用一个UserControl添加2个SidePanel,但它应该有不同的ViewModel。 MainViewModel alredy有2个属性,创建了SidePanelViewModel:

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

如何在xaml中为每个UserControl设置此属性中的对象作为DataContext? 这样的事情不起作用:

<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。 或者请建议任何其他方法来达到同一目标..

1 个答案:

答案 0 :(得分:1)

我通过将SidePanelViewModel的两个实例添加为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>

并添加新的Window.Resource绑定所有类型的SidePanelViewModel以使用SidePanelViev可视化

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

这有效,但如果有人有更好的想法,请不要犹豫发布,我不确定我的决定是好的