【问题标题】:How to combine a ViewModel and static objects [closed]如何结合 ViewModel 和静态对象 [关闭]
【发布时间】:2017-04-22 18:03:38
【问题描述】:

我是 WPF 新手,但我使用 C# 已经有一段时间了。也许像我这样的类似问题已经在某个地方得到了回答,但我真的不知道该使用什么搜索词。

所以在我的窗口上,我使用了 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 更好?

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

感谢您的回答。

【问题讨论】:

  • 这是一个合理的问题,我不知道为什么人们会自己吃。

标签: c# wpf binding viewmodel


【解决方案1】:

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

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


顺便说一句,绑定工作不需要ObservableCollection。可以使用通用列表并绑定到它(在 VM 上使用 INotifyPropertyChanged)。仅当要从集合中动态添加或删除项目时才需要ObservableCollection,并且需要绑定到的内容来处理该特定事件。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多