WPF中多窗口共享静态属性
2018-06-23 22:35:15来源:未知 阅读 ()
由于我的DoubanFm在重新考虑之后,需要设置一个全局的CurrentSong,这个字段要让所有的VM都知道,而我同时又想把它作为我所有VM的共有属性。而且我想尽量减少代码的复制,提高重用。所以我做了以下的工作:(下面是我在WPF中的测试)
首先我们得熟悉MVVMlight框架
然后:
(1)基类
一。抽象的VM的基类
abstract class MainViewModel : ViewModelBase
二。私有静态,公有非静态暴露,还有关键点:在属性更改之后用 RaisePropertyChanged<T>把更改通过Messenger消息发送出去
1 protected const string DataItemPropertyName = "DataItem"; 2 3 static private DataItem dataitem=null; 4 5 6 public DataItem DataItem 7 { 8 get 9 { 10 return dataitem; 11 } 12 13 set 14 { 15 if (dataitem == value) 16 { 17 return; 18 } 19 20 var oldvalue=dataitem; 21 dataitem = value; 22 RaisePropertyChanged<DataItem>(DataItemPropertyName, oldvalue, value, true); 23 } 24 }
三。为子类VM提供通用注册消息的方法
1 protected void RegisterVM(object vm) 2 { 3 Messenger.Default.Register<PropertyChangedMessage<DataItem>>(vm, 4 (message) => 5 { 6 if(message.PropertyName==DataItemPropertyName) 7 RaisePropertyChanged(DataItemPropertyName); 8 9 }); 10 11 }
四。构造函数只在需要时给静态字段赋值(例子中只为null的静态赋值)
1 protected MainViewModel(IDataService dataService) 2 { 3 _dataService = dataService; 4 _dataService.GetData( 5 (item, error) => 6 { 7 if (dataitem == null) 8 { 9 dataitem = item;//初始化静态变量 10 } 11 }); 12 }
(2)子类:
子类1
1 public ViewModel1(IDataService dd):base(dd) 2 { 3 RegisterVM(this); 4 }
子类2
1 public class ViewModel2 :MainViewModel 2 { 3 4 5 public ViewModel2(IDataService dd):base(dd) 6 { 7 RegisterVM(this); 8 } 9 }
子类3
1 public class ViewModel3 : MainViewModel 2 { 3 4 public ViewModel3(IDataService dd) 5 : base(dd) 6 { 7 RegisterVM(this); 8 } 9 }
Ioc注册子类
SimpleIoc.Default.Register<ViewModel1>(); SimpleIoc.Default.Register<ViewModel2>(); SimpleIoc.Default.Register<ViewModel3>();
(3)效果
原页面
属性变动后
源代码下载。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- HTML连载74-制作无限滚动窗口、3D转换模块 2020-03-12
- 检测窗口大小显示和隐藏内容 2019-05-10
- html中<frameset>标签,框架结构各窗口的父级 2018-06-24
- js学习日记-各种宽高总结(配图) 2018-06-24
- CSS3弹性盒布局 2018-06-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash