您的位置:首页 > 其它

WPF MVVM模式实践

2014-01-03 11:20 323 查看
<一>关于在WPF中使用MVVM模式开发的数据绑定问题

在MVVM中事件通过Command属性的绑定实现,在后台使用RelayCommand类型实现一个命令,并且在这个属性中调用事件处理函数。但是在DataTemplete中,如果只是简单的绑定了一个RelayCommand属性,将发生不会触发事件处理函数的情况,这种情况下。应该这样做:

(1)引用ViewModel的命名空间。xmlns:local="clr-namespace:MiniSize.Entity.ViewModel"[[BR]]

(2)将一个ViewModel设置为资源

<Page.Resources>

<local:SearchViewModel x:Key="searchviewmodel"/>

</Page.Resources>

(3)

<Hyperlink x:Name="edit_hlk" Command="{Binding Source={StaticResource? searchviewmodel},Path=EditCommand?}" CommandParameter?="{Binding}">编辑</Hyperlink>

<Hyperlink x:Name="delete_hlk" Command="{Binding Source={StaticResource? searchviewmodel},Path=DelCommand?}" CommandParameter?="{Binding}">删除</Hyperlink>

OK!perfect~

付一个小方法:查看绑定的错误信息。在调试中,选择选项和设置,选择左侧输出窗口,将右侧的绑定项属性改为所有,就可以在程序运行时的输出窗口看到有关绑定的问题。 (上面所遇到的问题就是,Path错误导致的)。

<二>MVVM页面跳转问题

WPF程序打开新的窗口,直接使用new window()即可,在这里记录的是使用一个 window 多个Page之间实现跳转。 主要使用的是Frame实现跳转,具体代码如下: (1)((Frame)System.Windows.Application.Current.MainWindow?.Content).NavigationService?.Navigate(Uri
uri,Object model); (2)((Frame)System.Windows.Application.Current.MainWindow?.Content).NavigationService?.Navigate(Object
root);

方法(2)的参数就是要跳转的页的实例。

<三>MVVM页面间传值问题

在页面跳转过程中往往需要传递一个值给新的页面,这样的做法在普通的WPF程序中很容易实现,但是在MVVM模式中,有一种较为通用的解决

办法。代码如下:

在接收值的VIewModel中:

GalaSoft?.MvvmLight?.Messaging.Messenger.Default.Register<MiniSize?.Models.Model>(this,
(model) =>

{

数据操作,model为一个参数,他是一个Model类型的实例。

});

在发送值得ViewModel中:

Messenger.Default.Send<MiniSize?.Models.Model>(model as MiniSize?.Models.Model);

具体的执行过程是,当发送端执行到send方法时,会跳转到register的具体数据操作方法中执行。 需要注意的是,register必须在send存在之前而存在,也就是说在send 之前,程序必须知道有一个地方存在一个Register 否则的话在程序第一次传值的时候是不会接收到的,只有在第二次的时候才会接收到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  WPF MVVM