我对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的隐藏代码类中保存TestingViewModel对象,为什么必须将它传递给BindingContext?
以下一行:
CanvasView.Strokes = Model.ActivePage.Strokes;
CanvasView.LoadBitmapInMemory(path, Model.ActivePage.Width, Model.ActivePage.Height);
问题2:Strokes是笔画对象的集合。做笔画 也是一个ViewModel。
答案 0 :(得分:0)
MVVM的理念是将创建视图和业务逻辑之间的关注分开。
ViewModel将管理您的业务逻辑,包括Properties
和Commands
或RelyCommands
的实现,您稍后会将其绑定到您的视图中。很简单,您将不会有任何代码在你对最佳案例的看法中。
为了更好地理解这种模式,我建议你阅读这个msdn链接,它将向你说明如何重新构造代码以便更好地使用以及使用MVVM有什么好处