2016-11-12 66 views
0

我有MainWindow.xaml页面与它的MainViewModel 并希望添加2个SidePanels使用一个UserControl,但它应该有不同的ViewModels。 MainViewModel alredy有2个属性与创建SidePanelViewModels:分配不同的ViewModels到一个UserControl

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

如何设置这个属性的DataContext在XAML每个用户控件对象? 事情是这样的不列入工作:

<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

你的问题是什么?你所展示的应该是有效的。 – dkozl

+0

但它没有,当我试图绑定用户控件中的任何属性时,用户控件的属性窗口显示它没有数据上下文 –

+1

疯狂的猜测,但在'UserControl'构造函数中,您是否执行类似于'DataContext = this '? – dkozl

回答

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解决我的问题是什么结合所有类的使用SidePanelViev

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

这工作,但如果有人有更好的建议,请不要犹豫,后他们被可视化类型SidePanelViewModel,我不知道我的决定是一个好

相关问题