MVVM两个Viewmodel在单个xaml文件中

时间:2012-11-02 15:32:49

标签: wpf mvvm

我正在使用一个包含两个面板的xaml文件(左面板,右面板)。这意味着两种观点。 我还在每个视图中使用两个ViewModel。 如何将DataContext绑定到这种情况?

3 个答案:

答案 0 :(得分:3)

您需要拥有自己的ViewModel。您可能已经拥有一个包含多个ViewModel的View。你有一个绑定到List的ItemControl吗?我经常这样做。

我会创建一个具有两个属性的ViewModel。

public class ParentScreenViewModel : ViewModelBase
{

    public ViewModelBase LeftPanel 
    { 
        get {...}
        set {...}
    }

    public ViewModelBase RightPanel 
    { 
        get {...}
        set {...}
    }
}

然后XAML将绑定到这些:

<Panel x:Name="LeftPanel" DataContext="{Binding LeftPanel}" />
<Panel x:Name="RightPanel" DataContext="{Binding RightPanel}" />

无论如何,这就是我要做的。

答案 1 :(得分:0)

您可以在树视图中的任何子元素上更改DataContext。

否则说,将两个面板设置为各自的DataContext - 它将优先于父容器(例如window或usercontrol)datacontext。

答案 2 :(得分:0)

如果您有例如两个StackPanel,试试这个:

<StackPanel x:Name="spFirst" />

<StackPanel x:Name="spSecond" />

在代码隐藏中:

FirstViewModel vm1 = new FirstViewModel();

SecondViewModel vm2 = new SecondViewModel();

spFirst.DataContext = vm1;

spSecond.DataContext = vm2;

Here你有例子(DoubleDataContextExample.zip)。