在Windows应用商店应用中将视图模型从页面传递到用户控件

时间:2013-02-23 17:06:41

标签: xaml windows-store-apps

在Windows应用商店拆分应用中,我想将视图模型从页面传递给用户控件。场景是我想在多个页面中重用一些常见的xaml,使用像视图一样的UserControl。

在主页面中:

<common:LayoutAwarePage
    ...
    DataContext="{Binding ViewModel, RelativeSource={RelativeSource Self}}"
    ... >
  <views:MyUserControlView Model="{Binding ViewModel}" />
...

在用户控制代码中:

public sealed partial class MyUserControlView : UserControl
{
    public static readonly DependencyProperty ModelProperty =
        DependencyProperty.Register("Model", typeof(MenuSource),
        typeof(MyUserControlView), null);
    ...
    public ModelType Model
    {
        get
        {
            return this.GetValue(ModelProperty) as ModelType ;
        }

        set
        {
            this.SetValue(ModelProperty, value);
        }
    }

永远不会调用模型设置器。如何将用户控件连接到父页面的视图模型?

或者,是否有更好的方法来实现在页面中使用的共享视图?

感谢。

-John

1 个答案:

答案 0 :(得分:2)

正确的绑定是:

<views:MyUserControlView Model="{Binding}" />

您已为上面的页面设置了DataContext。所有绑定都与当前DataContext相关。

但是仍然不会调用setter。它只是从代码中访问DependencyProperty的包装器。绑定将直接调用SetValue

根据您的要求,您甚至可能不需要定义自己的Model DependencyProperty。每个控件都自动从其父控件继承DataContext。在上面的示例中,用户控件已将其DataContext设置为与页面相同的视图模型。