This question already has answers here:
How can I replace static ObservableCollection so it accesable on all windows in the MVVM way
                                
                                    (3个答案)
                                
                        
                                6年前关闭。
            
                    
我正在设计一个LogManager类,以处理LogMessage对象形式的应用程序中的所有日志。它们保存在类的ObservableCollection中。 LogManager本身是静态的,可以在程序的每个部分访问。

现在,我想制作一个可以显示ViewObservableCollectionLogMessages,但是我无法确定如何通知ViewModel已添加新的LogMessage

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

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

最佳答案

您应该考虑您LogManager的责任。是否真的需要实现INotifyPropertyChanged

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

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为非静态是明智的。

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

10-10 23:27