我已经尝试了几次在帖子中找到答案但尚未找到答案(至少在我理解的情况下,因为WPF相当新)。
我在视图构造函数中定义了一个数据上下文:
this.DataContext = viewModel;
如果可能,我想在单个视图中使用多个数据上下文?我从其他人那里听到了多个不一致的答案。目标是我需要访问多个视图模型中的属性。例如,我的视图XAML用于如下所示的情况:
<MultiBinding Converter="{StaticResource multiBooleanToVisibilityConverter}">
<Binding Path="ResultControlsVisibileByDefault" UpdateSourceTrigger="PropertyChanged"/>
<Binding Path="StarWidthValueList.Count" UpdateSourceTrigger="PropertyChanged"/>
</MultiBinding>
如果我可以在适当的视图模型中明确引用每个属性,那就太棒了。
注意:有多个基于窗口的视图模型覆盖在主窗口中。它们根据用户的类似向导的选择而变为活动状态。
答案 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代表的那些)