2017-04-22 28 views
0

我是WPF的新手,但我在C#上工作了一段时间。也许像我这样的类似问题已经在某个地方得到了答案,但我真的不知道该用什么搜索词。如何结合ViewModel和静态对象

因此,在我的窗口中,我使用OxyPlot库中的图形。它的ItemsSource绑定到ViewModel中的ObservableCollection<DataPoint>

如果我希望DataPoint列表在整个应用程序中可用,该怎么办?

是否有意义在这种情况下,以创建这样一个类:在视图模型

public class Global 
{ 
    public ObservableCollection<DataPoint> DataPoints { get; set; } = new ObservableCollection<DataPoint>(); 
} 

,并指向它:

using static MyProject.Global; 
public class MainViewModel 
{ 
public ObservableCollection<DataPoint> MyPoints { get => DataPoints; } 
} 

还是更不要把这个列表分成ViewModel并直接绑定到Global.DataPoints?

无论如何,创建一个项目范围的静态类还是以不同的方式通过应用程序共享对象是一种好方法?

感谢您的回答。

+0

这是一个合理的问题,我不知道为什么人们对SO吃自己的。 – OmegaMan

回答

1

请记住,MVVM只是一个将数据表示与业务逻辑与可视化表示分开的系统。其他组件访问数据的方式不一定相关。

我会把这个集合放在虚拟机上。然后在应用程序类中实例化VM,并将其分配给该类上的静态成员属性。然后,您可以通过应用程序类的静态代码访问其他代码段。


作为一方不需要ObservableCollection使绑定工作。可以使用通用列表并绑定到它(在VM上使用INotifyPropertyChanged)。当项目动态地添加到集合中或从集合中移除时,只需要ObservableCollection,并且想要处理该特定事件。

我有我的博客上这样一个例子:

Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Binding