【发布时间】: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。
【问题讨论】: