在查看多个数据上下文(Multiple Data Contexts in View)

2019-08-17 09:44发布

我已经尝试了几次找到职位的答案,但暂时还没有发现(至少在相当以来新WPF我的理解)。

我定义视图构造数据上下文:

this.DataContext = viewModel;

我想如果可能的单一视图中使用多个数据上下文? 我从别人听到多个不一致的答案,这样。 我们的目标是,我需要在多个视图模型访问性能。 例如我的视图XAML将在下面示出这样的情况下使用:

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

这将是巨大的,如果我可以明确地引用在适当的视图模型每个属性。

注意:有基于在主窗口中覆盖该窗口的多个视图模型。 他们基于用户进行的精灵般的选择变得活跃。

Answer 1:

我发现最简单的解决办法是让一个视图模型,其持有另外的ViewModels的Properties 。 然后在视图可以访问他从所有不同的ViewModels想要的属性...

为了说明这一点,你可以有一个VMContainer:

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

现在,在你看来你设置DataContext的实例VMContainer你已经设置的特定虚拟机属性...

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

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

值得一提的是,你不必创建一个全新的VMContainer类只是这一点。 你也可以在现有VM添加一个新的属性,用于其他VM(如果可能的话/逻辑根据您的VM代表什么)



文章来源: Multiple Data Contexts in View