c# - 通知 ViewModel 静态模型的变化

标签 c# wpf mvvm-light

我正在设计一个LogManager类来处理我的应用程序中的所有日志,格式为 LogMessage对象。它们保存在 ObservableCollection 中在类里。 LogManager它本身是静态的,可以在程序的每个部分进行访问。

现在我想做一个View可以显示ObservableCollectionLogMessages ,但我不知道如何通知 ViewModel一个新的LogMessage已添加...

我尝试实现INotifyPropertyChanged ,但由于类是静态的,这是不可能的。

PS:我正在为我的应用程序使用 MVVM-Light 工具包

最佳答案

您应该考虑您的LogManager的职责。它真的需要实现INotifyPropertyChanged吗?

您可以在 XAML 中为 LogManager 使用 StaticResource,或者在 View 的 ViewModel 中为其提供属性。

View 模型:

//Placeholder class
public static class LogManager
{
    public static ObservableCollection<LogMessage> Messages { get; }
}

public class LogMessage
{
    public string Text { get; set; } 
}

public class LogManagerViewModel
{
    public ObservableCollection<LogMessage> Messages { get { return LogManager.Messages; } }
}

XAML:

<ListBox ItemsSource="{Binding Messages}" DisplayMemberPath="Text" />

也就是说,我发现建议考虑使用 MvvmLight 的内置依赖项注入(inject)功能并使 LogManager 非静态。

关于c# - 通知 ViewModel 静态模型的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16984611/

相关文章:

c# - 试图在 .NET 应用程序中读取或写入 protected 内存

c# - WPF:在不破坏 IsEnabled 的情况下实现 ICommandSource

c# - 以编程方式隐藏 WPF 功能区标题

c# - 如何将 ViewModel 属性验证与 ViewModel 分离?

wpf - 在 MVVM-light 和 WPF 中切换 View /用户控件的最佳方法是什么?

c# - FormStartPosition.CenterParent 不起作用

c# - Gridview 不保留 c# 和 ASP.Net 中的旧值

c# - 无法实例化事件处理程序。输入 : Sitecore. Publishing.HtmlCacheClearer

c# - OneWayToSource 绑定(bind)重置目标值

c# - Silverlight 构造函数注入(inject) View 模型+设计模式