在我的程序中记录某些内容之后,我将Logging信息存储在CustomLogger类中名为LogItems的公共字段中。
编辑:我的CustomLogger类现在实现了IMyLogger
public class CustomLogger : IMyLogger
{
// LogItems are stored in this field. Assume that it is not Null.
public ObservableCollection<LogItem> LogItems = new ObservableCollection<LogItem>
public CustomLogger()
{
}
// Other methods that populate the LogItems field
}
IMyLogger如下:
public interface IMyLogger : ILoggerFacade
{
ObservableCollection<LogItem> LogItems { get; set; }
}
编辑:有人能告诉我如何从CustomLogger类中检索LogItems对象吗?我需要LogItems才能在我的viewModel中显示它。我的ViewModel类如下:
[Export]
[PartCreationPolicy(System.ComponentModel.Composition.CreationPolicy.Shared)]
public class LoggerViewModel : ViewModelBase
{
public ObservableCollection<LogItem> LogItems { get; set; }
protected static readonly ILog log = LogManager.GetLogger(typeof(LoggerViewModel));
[ImportingConstructor]
public LoggerViewModel(CustomLogger cLogger)
{
// Can anyone tell me why I cannot call LogItems from cLogger here? An activation error is being thrown here.
LogItems = cLogger.LogItems;
}
}
运行代码后,我在尝试获取LoggerView类型的实例时遇到激活错误,键“”。
如果我将LoggerViewModel构造函数更改为
public LoggerViewModel()
{
}
不会抛出任何错误,但我的视图模型中没有显示任何内容。
如何在视图模型中显示日志记录信息?
答案 0 :(得分:0)
如何创建LoggerViewModel?您是否使用任何IoC框架或自己创建实例?
看起来您正在尝试在LoggerView.xaml中使用ViewModelLocator。由于您将构造函数放入参数,因此需要解决它。您有两个选择:
SimpleIoc.Default.Register<CustomLogger>();
LoggerViewModel vm = new LoggerViewModel(new CustomLogger());
this.loggerView.DataContext = vm;
我希望这会有所帮助。
=============================================== ==========================
关于解决方案1的更多细节。
如果您决定使用SimpleIoC,那么:
您需要在ViewModelLocator的构造函数中注册CustomLogger和LoggerViewModel
SimpleIoc.Default.Register< CustomLogger>();
SimpleIoc.Default.Register< LoggerViewModel>();
LoggerViewModel构造函数应该有带有CustomLogger参数的构造函数,IoC将采用这个。
在ViewModelLocator中,您应该公开一个属性
public LoggerViewModel LoggerViewModel
{
get { return ServiceLocator.Current.GetInstance< LoggerViewModel>(); }
}
< UserControls ....
DataContext="{Binding Source={StaticResource Locator}, Path=LoggerViewModel}">