视图中的多个数据上下文

时间:2013-03-07 21:36:49

标签: c# wpf xaml binding wpf-controls

我已经尝试了几次在帖子中找到答案但尚未找到答案(至少在我理解的情况下,因为WPF相当新)。

我在视图构造函数中定义了一个数据上下文:

this.DataContext = viewModel;

如果可能,我想在单个视图中使用多个数据上下文?我从其他人那里听到了多个不一致的答案。目标是我需要访问多个视图模型中的属性。例如,我的视图XAML用于如下所示的情况:

<MultiBinding Converter="{StaticResource multiBooleanToVisibilityConverter}">
                <Binding Path="ResultControlsVisibileByDefault" UpdateSourceTrigger="PropertyChanged"/>
                <Binding Path="StarWidthValueList.Count" UpdateSourceTrigger="PropertyChanged"/>
            </MultiBinding>

如果我可以在适当的视图模型中明确引用每个属性,那就太棒了。

注意:有多个基于窗口的视图模型覆盖在主窗口中。它们根据用户的类似向导的选择而变为活动状态。

1 个答案:

答案 0 :(得分:16)

我发现最简单的解决方案是使用一个ViewModel将其他ViewModel保存为Properties。然后,View可以从所有不同的ViewModel中访问他想要的属性......

为了说明,您可以拥有一个VMContainer:

public class VMContainer
{
    public FirstViewModel   VM1 { get; set; }
    public SecondViewModel  VM2 { get; set; }
}

现在,在您的视图中,将DataContext设置为VMContainer的实例,您已在...中设置了特定的VM属性

然后你可以在XAML中做这样的事情

<Textbox Text="{Binding VM1.SomePropertyInFirstViewModel}" />
<Textbox Text="{Binding VM2.SomePropertyInSecondViewModel}" />

值得注意的是,您并没有 为此创建一个全新的VMContainer课程。您也可以在现有VM中为该其他VM添加新属性(如果它可能/逻辑基于您的VM代表的那些)