У меня нет хорошего понимания 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.