将依赖项属性传递给子视图

时间:2014-02-05 13:47:42

标签: wpf xaml data-binding mvvm

我目前正在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。

有没有办法将属性传递给每个视图模型而不必复制它?或者我完全错了吗?

谢谢!

2 个答案:

答案 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并将颜色绑定到属性?