Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 视图中的多个数据上下文_C#_Wpf_Xaml_Binding_Wpf Controls - Fatal编程技术网

C# 视图中的多个数据上下文

C# 视图中的多个数据上下文,c#,wpf,xaml,binding,wpf-controls,C#,Wpf,Xaml,Binding,Wpf Controls,我已经试过几次在帖子中找到答案,但还没有找到(至少在我对WPF的了解上是如此) 我在视图构造函数中定义了一个数据上下文: this.DataContext = viewModel; 如果可能,我想在一个视图中使用多个数据上下文?我从其他人那里听到了许多不一致的答案。目标是我需要访问多视图模型中的属性。例如,在如下所示的情况下使用my view XAML: <MultiBinding Converter="{StaticResource multiBooleanToVisibilityCo

我已经试过几次在帖子中找到答案,但还没有找到(至少在我对WPF的了解上是如此)

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

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

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

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


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

我找到的最简单的解决方案是使用一个ViewModel,将其他ViewModel作为属性保存。然后视图可以从所有不同的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所代表的内容)

我喜欢这个解决方案!我不知道我能做什么。在绑定中。我正在考虑将阴影属性放在容器中,容器只会引用其他VM中感兴趣的属性。谢谢这是一个很好的解决方案。谢谢布拉希玛!谢谢你的样品!