4

我已经尝试了几次在帖子中找到答案,但还没有找到(至少在我对 WPF 相当陌生的情况下)。

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

this.DataContext = viewModel;

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

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

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

注意:有多个基于覆盖在主窗口中的窗口的视图模型。它们基于用户做出的类似向导的选择而变得活跃。

4

1 回答 1

16

我发现的最简单的解决方案是让一个 ViewModel 将其他 ViewModel 保存为Properties. 然后视图可以从所有不同的视图模型中访问他想要的属性......

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

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

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

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

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

值得注意的是,您不必为此创建一个全新的VMContainer类。您还可以在现有 VM 中为该其他 VM 添加一个新属性(如果可能/符合逻辑,取决于您的 VM 所代表的内容)

于 2013-03-08T17:30:37.370 回答