在静态模型中更改时通知ViewModel

时间:2013-06-07 12:50:24

标签: c# wpf mvvm-light

我正在设计一个LogManager类来处理我的应用程序中的所有日志,形式为LogMessage个对象。它们保存在班级的ObservableCollection中。 LogManager本身在我的程序的每个部分都是静态的。

现在我想创建一个View,可以显示ObservableCollection LogMessages,但我无法理解如何通知ViewModel已添加新的LogMessage ...

我尝试实现INotifyPropertyChanged,但由于该类是静态的,因此无法实现。

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

1 个答案:

答案 0 :(得分:2)

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

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

视图模型:

//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的内置依赖注入功能并使LogManager非静态。