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