如何组合ViewModel和静态对象

时间:2017-04-22 18:03:38

标签: c# wpf binding viewmodel

我是WPF的新手,但我现在做了很长时间的C#。也许像我这样的类似问题已在某处得到解答,但我真的不知道用什么搜索术语。

所以在我的Window上我使用了OxyPlot库中的图表。其ItemsSource绑定到ViewModel中的ObservableCollection<DataPoint>

如果我想在整个应用程序中使用此DataPoint列表,我该怎么办?

在这种情况下创建这样的类是否有意义:

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

在ViewModel中指向它:

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

或者最好不将此列表放入ViewModel并直接绑定到Global.DataPoints?

它是否是创建项目范围的静态类或以不同方式在应用程序上共享对象的好方法?

感谢您的回答。

1 个答案:

答案 0 :(得分:1)

请记住,MVVM只是一个将数据表示与业务逻辑从可视化表示中分离出来的系统。其他组件如何访问数据并不一定相关。

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

另外,不需要ObservableCollection来进行绑定工作。可以使用通用List并绑定到它(在VM上使用INotifyPropertyChanged)。只有动态地从集合中添加或删除项目时才需要ObservableCollection,并且只需要它绑定的内容即可处理该特定事件。

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

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