如何在Metro / WinRT中扩展视图

时间:2012-07-22 14:29:23

标签: c# microsoft-metro

我正在努力构建使用WinRT / Metro进行MVVM的复合部件。我已经构建了自己的ViewBase,它派生自UserControl,所以我可以用它来扩展我的观点:

using System;
using System.Linq;
using Windows.UI.Xaml.Controls;
using System.Collections.Generic;

public abstract class ViewBase : UserControl
{
    /// <summary>
    /// Initializes a new instance of the ViewBase class.
    /// </summary>
    public ViewBase() : base()
    {
        BindViewModelLocatorToView(viewModelLocator: GetViewModelLocator());
    }

    /// <summary>
    /// Defines a method that returns a view model locator to be used with this class.
    /// </summary>
    protected abstract IViewModelLocator GetViewModelLocator();


    /// <summary>
    /// Defines a method that Bind's the view model provided by the view locator to the view's data context.
    /// </summary>
    private void BindViewModelLocatorToView(IViewModelLocator viewModelLocator)
    {
        if (viewModelLocator != null)
        {
            DataContext = viewModelLocator.ViewModel;
        }
    }
}

当我尝试扩展我用作视图的UserControl时,我得到一个错误,该部分的父级必须与生成的部分父级匹配。当然,我无法更改生成的类parent,因为它只是在重建时更改。

我注意到,在示例应用程序中,他们使用与布局感知页面相同的概念,但我不确定他们如何设置设计器生成的部分匹配。

有谁知道这是怎么做的?

1 个答案:

答案 0 :(得分:1)

您需要将XAML中的根元素更改为<ns:ViewBase>,其中ns被声明为您的类所在的命名空间。