c# - 这个变量从哪里来? MVVMcross UWP框架示例

标签 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如何知道此类,因为我看不到它在继承路径中的设置位置。

最佳答案

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

在HomeView.xaml中:

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

关于c# - 这个变量从哪里来? MVVMcross UWP框架示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43309375/

相关文章:

ios - 如何在 Xamarin.iOS 中使用动画移动 map 注释?

wpf - 按钮可见性绑定(bind)不更新

c# - Entity Framework - 包含/引用/集合

c# - .NET 中的 TransactionScope 错误?更多信息?

xamarin - 将 Serilog 与 MvvmCross 结合使用

c# - 如何将字符串添加到 ICollection<string>?

binding - 处理 subview 的父 View 命令怎么办? View 建模会很乏味或不需要?

c# - 没有将选定的下拉列表项返回给 Controller

c# - OpenQA.Selenium.NoSuchElementException - C# Selenium

c# - 如何在 Xamarin Forms 中的 "re-adding"TabbedPage 子项时禁用 BottomNavigationView 切换模式?