2010-04-22 50 views

回答

8

我说创建V和VM可用之前的任何数据;在VM中设置一次可用的数据。

在数据加载之前显示IsLoading指示器,并将数据加载到单独的线程中。否则,如果数据需要一段时间加载,你会得到可怕的WPF黑屏。

即使您需要等待数据加载,视图加载时视觉效果会更好,但感觉会更快。

+0

我想接下来的问题是:那是什么是模型进入ViewModel的最佳方式吗?我宁愿虚拟机不负责直接获取模型 – Schneider 2010-04-22 12:27:31

+0

让模型成为您在视图模型上设置的属性 – 2010-04-23 02:36:59

4

我所做的是立即创建我的虚拟机和查看,并显示视图。

与许多应用程序一样,除了“启动状态”枚举(可立即使用),在启动过程中不断更新,发送到VM,然后到达进度条我的看法。

我的虚拟机订购了模型中的事件,这些事件发生时会推送到虚拟机中。在查看XAML I数据绑定到VM的每个VM属性。

通过这种方式,用户随时了解情况。

1

仅创建视图没有视图模型是IMO毫无意义 - 从视图的所有绑定属性怎么样?由于没有ViewModel,它们没有任何约束。你没有看到任何例外的事实并不意味着一切都OK :)

当然你应该instanciate你的ViewModels的所有视图(当然在此刻使用的视图:))在一开始 - 这是不只是建议,但需要。

2

我已经采纳了Josh Smith在MSDN上的文章中所做的事here...向下滚动到部分,他讨论了如何将View应用于ViewModel。在这样做的时候,视图是在ViewModel被渲染时创建的。没有必要手动创建视图,然后再将DataContext分配给ViewModel。这会自动为你做。

“你可以很容易地告诉WPF如何使用类型的DataTemplates渲染视图模型对象的类型化的DataTemplate没有一个X:分配给它的关键价值,但它确实有它的数据类型属性设置为实例如果WPF试图呈现其中一个ViewModel对象,它将检查资源系统是否有一个类型化的DataTemplate,它的DataType与您的ViewModel对象的类型(或基类)相同。如果它找到一个,它将使用该模板来呈现由选项卡项目的Content属性引用的ViewModel对象。“

换句话说,你会创建视图模型,如下所示:

MyViewModel viewModel = new MyViewModel(); 

// Add the view model to the content of some control (TabItem, Grid, Window, etc.) 
// NOTE: You wouldn't actually make this call... instead you would add the 
// ViewModel to a collection or a property and the parent would bind 
// to it and display it properly 
MyContainer.Content = viewModel; 

而在你的ResourceDictionary中,你将定义如下:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:vm="clr-namespace:DemoApp.ViewModel" 
    xmlns:vw="clr-namespace:DemoApp.View" 
    > 

    <!-- NOTE: The View must be a UserControl (or page) --> 
    <DataTemplate DataType="{x:Type vm:MyViewModel}"> 
     <vw:MyView /> 
    </DataTemplate> 

</ResourceDictionary> 
+0

我很熟悉wi这种模式,并使用了它几次...但关于它的东西总是给我heebeejeebees! – Schneider 2010-04-22 12:26:11

+1

哈哈,我认为这是因为它“神奇地”为您呈现ViewModel而没有创建视图。我明白了。起初我也有点怀疑,但在思考了一段时间之后,我意识到这真的有多强大。想想看...你可以把你的ViewModel放在任何地方!这允许您的应用程序在运行时从标签式MDI界面更改为Windows MDI界面(或其他),而不需要更改代码。这就是我喜欢它的原因。 – Brent 2010-04-22 13:05:43

+0

一个缺点是可混合性...在编辑用户控件时datacontext中没有数据 – Schneider 2010-04-22 14:25:43

相关问题