精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品原创,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究。点名“简易百科”和闲暇巴盗用锐英源原创内容。
锐英源软件在使用MVVMLight开发了企业信息化软件MIS软件后,解决了些常见问题,比如MVVMLight的ViewModelLocator刷新功能完善和MVVMLight详情页不刷新。
MVVMLight里使用ViewModelLocator类管理ViewModel类,ViewModel里有界面对应的数据对象,ViewModelLocator是通过类实例来管理ViewModel类,比如:
SimpleIoc.Default.Register<AViewModel>();
public AViewModel A => ServiceLocator.Current.GetInstance<AViewModel>();
这些实例使用是在xaml里的:
DataContext="{Binding Source={StaticResource Locator},Path=PeopleSafeStatus}" d:DesignWidth="800"
用Path来指定。
通过实例和Path的Binding,就可以让界面对应的数据对象里的数据显示到xaml的WPF界面里了。
不过如果一个Window重复连续打开,用的ViewModel还是同样的实例,这可以在ViewModel的构造函数里加断点来判断出来,构造函数断点没有触发。这样,ViewModel里的数据对象是不会更新的,还是旧的Model里的数据,这就导致了MVVMLight的ViewModelLocator刷新功能漏洞和MVVMLight详情页不刷新情况。
开始我想着ViewModel不更新,就释放重新创建,用这个办法试着解决问题,但是ViewModelLocator里的Cleanup很奇怪用不了,ViewModelLocator里的实例管理也比较抽象,一时半会也查不出来。
这个问题在一个月前就遇到过,当时也没细想,放了放,这时候就一定要解决了。
后来想了个在xaml.cs里强制刷新的功能,调用Command的Execute方法解决了问题。
MVVMLight的例子和文档比较少,国内的尤其少,可能会有其它更好的方法,欢迎交流。