这个变量来自哪里? MVVMcross UWP框架示例

时间:2017-04-09 16:53:43

标签: c# xamarin mvvm uwp mvvmcross

我已经从MVVMcross框架下载了一个示例here。当我构建UWP项目时,它会编译并运行,没有任何错误。

现在我正在尝试重新制作UWP项目,我遇到了一个位于以下文件中的问题:XPlatformMenus/XPlatformMenus.UWP/Views/Home/HomeView.xaml.cs

在第11行和第12行,该类调用base.Viewmodel的返回值。 问题:此属性来自哪里?

我的思维过程:

根据我的理解,应用程序正在尝试返回HomeViewModel类的名为ViewModel的属性。

但是当你检查HomeViewModel类时:XPlatformMenus/XPlatformMenus.Core/ViewModels/Home/HomeViewModel.cs(位于不同的项目中,引用了),没有属性ViewModel。

HomeViewModel继承自BaseViewModel:XPlatformMenus/XPlatformMenus.Core/ViewModels/Base/BaseViewModel.cs但是没有名为ViewModel的属性。 BaseViewModel继承自MvxViewModel,所以它必须来自哪里!好吧,我用Visual Studio查看MvxViewModel类我从元数据中接收到它:

namespace MvvmCross.Core.ViewModels {

    public abstract class MvxViewModel : MvxNavigatingObject, IMvxViewModel
    {
        protected MvxViewModel();

        public MvxRequestedBy RequestedBy { get; set; }

        public void Init(IMvxBundle parameters);
        public void ReloadState(IMvxBundle state);
        public void SaveState(IMvxBundle state);
        public virtual void Start();
        protected virtual void InitFromBundle(IMvxBundle parameters);
        protected virtual void ReloadFromBundle(IMvxBundle state);
        protected virtual void SaveStateToBundle(IMvxBundle bundle);
    }
}

这既没有ViewModel属性......当我在Visual Studio中的ViewModel属性上使用“转到定义”函数时,她将我引导到MvxWindowsPage:

using MvvmCross.Core.ViewModels;
using MvvmCross.Core.Views;
using MvvmCross.Platform.Core;
using MvvmCross.WindowsUWP.Views.Suspension;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

namespace MvvmCross.WindowsUWP.Views
{
    public class MvxWindowsPage : Page, IMvxWindowsView, IMvxView, IMvxDataConsumer
    {
        public MvxWindowsPage();

        public IMvxWindowsFrame WrappedFrame { get; }
        public IMvxViewModel ViewModel { get; set; }
        protected IMvxSuspensionManager SuspensionManager { get; }

        public void ClearBackStack();
        protected virtual IMvxBundle LoadStateBundle(NavigationEventArgs e);
        protected override void OnNavigatedFrom(NavigationEventArgs e);
        protected override void OnNavigatedTo(NavigationEventArgs e);
        protected virtual void SaveStateBundle(NavigationEventArgs navigationEventArgs, IMvxBundle bundle);
    }
}

确实有一个属性ViewModel。但我不知道HomeView如何知道这个类,因为我没有看到它在继承路径中的设置..

1 个答案:

答案 0 :(得分:2)

base.ViewModel引用从BaseView派生的类HomeView(使用它)。

在HomeView.xaml中:

<local:BaseView 
x:Class="XPlatformMenus.UWP.Views.HomeView"