【问题标题】:Xamarin: Give me some clarification with MVVMXamarin:给我一些关于 MVVM 的说明
【发布时间】:2016-08-30 21:56:28
【问题描述】:

我对 MVVM 不是很了解,看过其他页面的一些文章。

ViewModel 是否执行所有业务逻辑并与数据模型交互,然后将数据发送到视图以进行展示。

在View上,只会有与UI直接相关的功能。

这是我的代码,我有代码,但不确定它是否正确

        private TestingViewModel Model
    {
        get
        {
            return BindingContext as TestingViewModel;
        }
    }

    public TestingPage()
    {
        InitializeComponent();

        BindingContext = new TestingViewModel();
        Model.PropertyChanged += TestingPropertyChanged;

        NavigationPage.SetHasNavigationBar(this, false);
        NavigationPage.SetHasBackButton(this, false); 

        MediaFactory.ClearAllCachedMedia(); 
        SetupTappedControl(); 
    }

    private void TestingPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName.Equals("ActivePage"))
        {
            if (Model.ActivePage != null)
            {
                Device.BeginInvokeOnMainThread(async () =>
                { 
                    var path = await MediaFactory.GetImagePathAsync(Model.ActivePage.DocumentId + "_" + Model.ActivePage.PageNumber);

                    CanvasView.Strokes = Model.ActivePage.Strokes;
                    CanvasView.LoadBitmapInMemory(path, Model.ActivePage.Width, Model.ActivePage.Height); 
                });
            }
        }
    }

    #region File Button Selected 

    public void TapFileOpen(object sender, EventArgs e)
    { 
        Task.Run(() =>
        {
          var pickFileTask = CrossFilePicker.Current.PickFile();
          var data = pickFileTask.Result;
          Model.OpenDocument(data.FileName, data.DataArray);
        });

    }

问题 1:如果我只能在 View 的 Code-behind 类中保存 TestingViewModel 对象,为什么我必须将它传递给 BindingContext?

下面一行:

                    CanvasView.Strokes = Model.ActivePage.Strokes;
                    CanvasView.LoadBitmapInMemory(path, Model.ActivePage.Width, Model.ActivePage.Height); 

问题 2:Strokes 是一个笔划对象的集合。做笔画 也是一个 ViewModel。

【问题讨论】:

    标签: mvvm xamarin viewmodel


    【解决方案1】:

    MVVM 的理念是将创建视图和业务逻辑之间的关注点分开。

    ViewModel 将管理您的业务逻辑,包括 PropertiesCommandsRelyCommands 的实现,您稍后会将其绑定到您的视图中,如此简单,您不会在最佳情况下的视图中隐藏任何代码.

    为了更好地理解这种模式,我建议您阅读此msdn 链接,该链接将向您说明如何重新构建代码以更好地使用以及使用 MVVM 的好处

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-22
      • 2011-06-17
      • 2011-02-04
      • 2013-10-08
      • 2020-04-28
      • 2021-09-28
      • 2019-05-14
      • 1970-01-01
      相关资源
      最近更新 更多