2016-08-30 5 views
0

У меня нет хорошего понимания MVVM и прочитано несколько статей на других страницах.Xamarin: Дайте мне разъяснение с MVVM

Содержит ли ViewModel всю бизнес-логику и взаимодействует с моделью данных, которая затем отправляет данные в представление для презентации.

В представлении будет только функция, связанная непосредственно с пользовательским интерфейсом.

Это мой код у меня есть код, но не уверен, что это правильный способ сделать это

 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 в Code-behind класса View?

В строке ниже:

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

Вопрос 2: The Strokes представляет собой набор объекта инсульта. Do Strokes также ViewModel.

ответ

0

Идея MVVM заключается в том, чтобы разделить озабоченность между созданием представлений и бизнес-логикой.

модели представления будет управлять бизнес-логику, в том числе реализации Properties и Commands или RelyCommands, что вы будете в дальнейшем привязать его в своих взглядах, так просто вы не имеете никакого кода позади в ваших взглядах на лучшем случае.

Для лучшего понимания для этой модели, я хотел бы предложить вам прочитать эту msdn ссылки, которая будет иллюстрировать вам, как вы можете реструктурировать код для более эффективного использования и какие выгоды от использования MVVM

Смежные вопросы