1

在 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);
        }
    }

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

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

谢谢。

-约翰

4

1 回答 1

2

正确的绑定是:

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

您已经DataContext为上面的页面进行了设置。所有绑定都相对于当前的DataContext.

不过,setter 仍然不会被调用。它只是访问DependencyPropertyfrom 代码的包装器。绑定会SetValue直接调用。

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

于 2013-02-24T15:42:26.300 回答