在实际的开发中,有一些集合或者属性可能是全局的,比如当你做一个oa的时候,可能需要展示所有的人员,这时这个所有的人员列表显然可以作为全局参数,比如这里有一个全局的静态属性UserList。而你在使用mvvm做wpf开发的时候,一般每个view都已经指定好了viewmodel。而viewmodel显然是不包含UserList。这时如果你想在绑定了viewmodel里面绑定UserList给某个ListBox该怎么办呢。首先你可以在你的viewmodel里面定义一个UserList指向全局静态变量的引用,就像下面这样:
public ObservableCollection<User> UserList{ get=>return Global.UserList; }
这是一个方法,但这个方法会让你的viewmodel变得臃肿。实际上wpf是支持静态参数的绑定的,在xaml里面这样写:
ItemsSource="{Binding Source={x:Static local:GlobalData.UserList}}"
或者:
ItemsSource="{x:Static local:GlobalData.UserList}"
这样,当你的任何一个模块,改变了UserList里面的东西,所有前端用到这个列表的,都会收到属性变更通知。
我会建议这个全局静态类写成单例模式的,比如下面这样写:
public class Glob