我有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。 或者请建议任何其他方法来达到同一目标..
答案 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>
这有效,但如果有人有更好的想法,请不要犹豫发布,我不确定我的决定是好的