Xamarin:给我解释一下MVVM



我对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:为什么我要把它传递给一个BindingContext,如果我可以只是持有TestingViewModel对象在后台代码类的视图?

下一行:

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

问题2:Strokes是stroke对象的集合。做中风也是一个ViewModel。

MVVM的思想是在创建视图和业务逻辑之间分离关注点。

ViewModel将管理你的业务逻辑,包括PropertiesCommandsRelyCommands的实现,你将稍后绑定到你的视图,所以简单,你不会有任何代码在你的视图在最好的情况下。

为了更好地理解这个模式,我建议你阅读这个msdn链接,它将向你展示如何更好地重构你的代码,以及使用MVVM

的好处是什么。

相关内容

  • 没有找到相关文章

最新更新