首页 > 解决方案 > Accessing multiple view models

问题描述

I have 2 simple user controls and 2 view models that bind to them. I now want to add these to a master user control but want to know the correct way of accessing ViewModel properties from View 1 in my View 2 in the text block named FromView1?

My View 1:

<UserControl x:Class="v1"
.....
    <Grid>
        <TextBlock Text="{Binding Text1}" />
    </Grid>
</UserControl>

My View 2:

<UserControl x:Class="v2"
..
    <Grid>
        <StackPanel>
            <TextBlock Text="{Binding Text2}" />

            <TextBlock x:name="FromView1" Text="{Binding Text1}" Background="Red" Width="100" />
        </StackPanel>
    </Grid>
</UserControl>

My main view containing View 1 and View 2

<UserControl x:Class="vMain"
....
    <Grid Margin="20">
        <StackPanel>
            <local:v1 x:Name="v1"/>
            <local:v2 x:Name="v2"/>

        </StackPanel>   
    </Grid>
</UserControl>

标签: wpfvb.net

解决方案


您应该将它们合并到一个单独的视图模型中,而不是拥有两个单独的视图模型MainViewModelv1然后v2应该DataContextvMain视图共享,这意味着他们可以绑定到他们想要做的任何属性。

因此,只需将DataContextof设置vMain为一个实例,MainViewModel并确保您没有在某处设置DataContextofv1或显式设置。v2

UserControls一般来说应该没有自己的视图模型。他们应该从他们的父母那里继承DataContext,这通常是一个窗口。

如果您的视图模型趋于变大,您可以使用部分类将定义拆分到多个源代码文件中。


推荐阅读