MVVM WPF模型视图模型交流,而加载数据

好了,所以我试图在我的手在我的努力继续我的技能有些模式编程。 我是一个赢窗体应用程序转换为WPF使用MVVM模式。 该应用程序基本上是大型机会话的GUI。 它通过导航主机屏幕抓取为最终编辑和更新数据在不同的面板。 我相信我已经掌握了每低于MVVM的核心概念,但有一个问题。

我建立了一个代表我会操纵对象的所有属性数据模型(100左右的数据点排气)。 我也上实现INPC了对视图绑定视图模型创建的代理属性。 现在从我已阅读,业务逻辑来获取数据应该是模型的责任。 在ViewModel清理数据和它呈现到它最后显示的视图。

所以,这一切似乎是工作,但这里的问题:

[SKIP TO这里的提问]

如果模型来控制业务逻辑和在一系列不同的面板,我怎么继续通过视图模型更新视图,以什么点数据拉是在拉从大型机会话中的数据。 在本质上是一个排序模型获取数据的进度指示器。 我知道我可以调用模型上的方法,然后报告,但我怎么调用方法并没有MODEL知道视图模型的存在的方法进行期间汇报。 当然,这是不直接在模型实施INPC。

感谢您的帮助,

范·亚伦

--------------解决方案-------------

如果您正在使用一个后台线程,你可以使用一个BackgroundWorker ,并使用ProgressChanged事件报告进度回视图模型。 因为这确实是一个实现细节你可能设计出具有丰富的事件模型模型。

单程:

public enum MainframeLoadStage { StageOne, StageTwo, StageThree }

public class LoadingStageEventArgs : EventArgs {
public MainframeLoadStage { get; set; }
}

class MyMainframeModel {
public event EventHandler<LoadingStageEventArgs> StageLoaded;
}

或者,如果你需要根据你的负荷的“舞台”细粒度数据:

public class MyMainframeModel {
public event EventHandler<LoadingStageOneEventArgs> StageOneLoaded;
public event EventHandler<LoadingStageTwoEventArgs> StageTwoLoaded;
}

另外,如果你愿意,你可以在回调中传递与调用一起报告状态回模型上的单一操作:

public class MyMainframeModel {
public void Load (Action<LoadingMessage> callback);
}

甚至,你可以考虑使用任务并行库(TPL),并从那里使用的功能集:http://msdn.microsoft.com/en-us/library/dd537609.aspx

在这所有的视图模型的作用当然是从模型到什么形式最适合用户界面(通常通过INPC,正如你所说),这些事件转换。

一般来说,视图模型将操作来获取数据,而不是实体模型。 所以你CustomerViewModel可能有GetCustomers方法。

还检查了异步CTP或者,如果你使用Visual Studio 11,你不需要CTP我相信。 新的异步东西,使得它很容易使异步调用和调度更新,例如UI线程上一个进度指示器。

异步编程与异步和等待http://msdn.microsoft.com/en-us/library/hh191443(v=vs.110).aspx

分类:C# 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.516 (s). 10 q(s)