我目前正在wpf中创建一个用户控件,其中包含用户将点击的几个“屏幕”。
我试图以相对不错的MVVM方式执行此操作,但是在将属性传递给每个视图时遇到了一些麻烦。
对于每个“屏幕”,我使用自己的viewmodel创建了一个视图(例如View1.xaml,View2.xaml)。然后,主用户控件可以访问这些视图:
<UserControl.Resources>
<local:ModuleBaseViewModel x:Key="ViewModelDataSource" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource ViewModelDataSource}}">
<Grid Background="#FF054549">
<local:View1 Visibility="Visible"/>
<local:View2 Visibility="Hidden"/>
</Grid>
</Grid>
现在,我想在每个视图之间共享一些属性(例如背景颜色)。如果我将此属性放在主usercontrol视图模型中,那么它将被忽略,因为每个视图都将其DataContext设置为它自己的viewmodel。
有没有办法将属性传递给每个视图模型而不必复制它?或者我完全错了吗?
谢谢!
答案 0 :(得分:0)
您可以通过多种方式实现这一目标。
一种解决方案可能是ViewModel for View1,View2等具有包含相同对象并绑定到它的CommonViewModel属性。
<Grid Backround={Binding CommonSettings.Background} />
另一种方法是使用相对绑定并绑定到包含视图的grind的datacontext。
<Usercontrol ...>
<Grid Backround={Binding DataContext.Background, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}} />
</UserControl>
答案 1 :(得分:0)
更好的方法是使用ResourceDictionary并在每个视图的资源中引用它吗?然后在资源字典中我可以添加一个背景SolidColorBrush并将颜色绑定到属性?