wpf绑定全局静态变量(mvvm)
在实际的开发中,有一些集合或者属性可能是全局的,比如当你做一个oa的时候,可能需要展示所有的人员,这时这个所有的人员列表显然可以作为全局参数,比如这里有一个全局的静态属性UserList。而你在使用mvvm做wpf开发的时候,一般每个view都已经指定好了viewmodel。而viewmodel显然是不包含UserList。这时如果你想在绑定了viewmodel里面绑定UserList给某个ListBox该怎么办呢。首先你可以在你的viewmodel里面定义一个UserList指向全局静态变量的引用,就像下面这样:
public List<User> UserList{ get=>return Global.UserList; }
这是一个方法,但这个方法会让你的viewmodel变得臃肿。实际上wpf是支持静态参数的绑定的,在xaml里面这样写:
ItemsSource="{Binding Source={x:Static local:GlobalData.UserList}}"
或者ItemsSource="{x:Static local:GlobalData.UserList}"
这样,当你的任何一个模块,改变了UserList里面的东西,所有前端用到这个列表的,都会收到属性变更通知。
再比如,你要在某个件上绑定System.DateTime.Now,则这么写:
<TextBlock Grid.Row="1" Text="{Binding Source={x:Static system:DateTime.Now},StringFormat='yyyy-MM-dd HH:mm:ss '}"/>
当然,要定义一下system:
xmlns:system="clr-namespace:System;assembly=mscorlib"。
事实上这种绑定是无意义的,因为Now只是普通的属性,并没有实现属性变更通知,因此你的textblock显示的时间不过是第一次加载的时间。它并不会随着时间的变化而变化。
这里面,source的作用其实就是指定源,通常我们绑定,只需要设定path,比如path=Name或者直接绑定某个属性,比如Text="{Binding Name}",这样系统会自动从你设定的DataContext里面找Name这个属性。而如果你指定了Source,系统便不会在你的DataContext里面查找,而是从指定的Source里面查找。因此,假设你的GlobalData里面有一个静态实体(Model),它里面有一个UserList,那么你应该这么写:
ItemsSource="{Binding UserList, Source={x:Static local:GlobalData.Model}}"
---------------------
作者:returnTrue999
来源:CSDN
原文:https://blog.csdn.net/dap769815768/article/details/82149363
版权声明:本文为博主原创文章,转载请附上博文链接!
wpf绑定全局静态变量(mvvm)的更多相关文章
- JavaFx之不通过全局静态变量进行窗体通信
百度了n多窗体通信,,,总是通过定义全局静态变量进行传值通信..我个人不喜欢一个controller里写满所有的布局(这样显得臃肿,但是组件传值方便).有没有另外的办法进行模块化并且可以传值呢.. 肯 ...
- C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别
局部变量(Local variables)与 全局变量: 在子程序或代码块中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序 ...
- C++ 局部静态变量,全局变量,全局静态变量,局部变量的区别和联系
C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域. 从作用域看: 全局变量具有全局作用域.全局变量只需在一个源文件 ...
- WPF 绑定到静态属性(4.5)
1. 声明静态事件 /// <summary> /// 静态属性通知 /// </summary> public static event EventHandler<Pr ...
- 关于C#静态变量初始化问题
关于这个静态变量,平时自己没有太认真的去认识.最近调项目的bug,让我重新认识了静态变量的特点. 其实,我们一直都在说:静态变量只在类第一次初始化的时候进行初始化,以后都不初始化. 很简单的一句话,但 ...
- 静态变量static和extern外引用
静态变量--加static关键字的变量,特点: (1)在全局数据区中分配内存,每次对其值得修改都会保留结果,直至程序结束. (2)若静态变量没显示初始化,那会被自动初始化为0,并且只能初始化一遍. 1 ...
- Python的学习(二十一)----Python的静态变量
前段时间在论坛里面有人提问说, class foo(): member1 member2 ... self.member1 foo.member2 其中的两个成员member1, member2有什么 ...
- Springmvc在项目启动时查询数据库并初始化静态变量
private static List<ResourceEntity> resourceList = null; //初始化的全局静态变量 @Autowired private Resou ...
- C和C++的静态函数和静态变量
1.C程序的静态变量和函数 引用自:https://blog.csdn.net/thanklife/article/details/78476737 作者:零点零一 C程序一直由下列部分组成 ...
随机推荐
- 嵌入式Qt-4.8.6显示中文并且改变字体大小和应用自己制作的字体库
问题: QT4.8.6在移植到开发板上的时候,中文支持是必不可少的,如何让QT支持中文,如何制作QT支持的字体文件,如何使QT UI编辑器中的字号与开发板中的字号一致. 详解: 1>如何让QT支 ...
- js 小数乘积位数太长
function accMul(arg1,arg2) { var m=0,s1=arg1.toString(),s2=arg2.toString(); try{m+=s1.split(".& ...
- NVL与NVL2
一.NVL函数是一个空值转换函数 NVL(表达式1,表达式2) 如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值. 该函数的目的是把一个空值(null)转换成一个实际的 ...
- POJ 2752 Seek the Name, Seek the Fame (KMP)
传送门 http://poj.org/problem?id=2752 题目大意:求既是前缀又是后缀的前缀的可能的长度.. 同样是KMP,和 HDU 2594 Simpsons' Hidden Tale ...
- 【Codeforces Round #440 (Div. 2) C】 Maximum splitting
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 肯定用尽量多的4最好. 然后对4取模的结果 为0,1,2,3分类讨论即可 [代码] #include <bits/stdc++ ...
- IOS使用AsyncSocket进行Socket通信
首先导入CFNetwork.framework框架 1.下载ASyncSocket库源码 2.把ASyncSocket库源码加入项目 3.在项目增加CFNetwork框架 使用AsyncSocket开 ...
- [RxJS] Stopping a shared observable execution
ConnectableObservable has the connect() method to conveniently dictate the start of the shared execu ...
- u3d demo起步第二章
假设要给一个角色加入寻路组件.那么仅仅须要选中这个角色,Component->Navigation->Nav Mesh Agent就能够加入寻路组件. 然后仅仅要agent.SetDest ...
- 解读Java中BigDecimal.ZERO.compareTo()的返回值含义
Java compareTo() 用法 例如: public static void main(String[] args) { BigDecimal bnum1, bnum2; bnum1 ...
- 使用ng-content进行组件内容投射
原文 https://www.jianshu.com/p/c0a39b1776c0 大纲 1.认识内容投射 2.一个简单组件 3.简单投射 4.针对性投射 5.ngProjectAs 6.代码资源 认 ...