0

将 WPF 与 Prism 和 Unity 一起使用 -

我有一个奇怪的缺陷,即 ObservableCollection 正在丢失它的集合。

我添加了一个真正的支持字段,以查看自动属性是否发生了一些有趣的事情。

我在字段上添加了一个 CollectionChanged 事件处理程序,该处理程序仅在我期待它时触发。

我正在使用服务定位器来检索实例,所以我想也许我得到了一个不同的实例,但其他属性和字段具有先前访问的预期值。

存储 ViewModel -

this.Container.RegisterInstance(
new ShellViewModel(), new ContainerControlledLifetimeManager());  

取回它——

return App.getUnityContainer().Resolve<ShellViewModel>();    

ObservableCollection 字段 -

private readonly ObservableCollection<BusinessProcessViewModel> openBusinessProcesses =  
new ObservableCollection<BusinessProcessViewModel>();

ObservableCollection 属性 -

public ObservableCollection<BusinessProcessViewModel> OpenBusinessProcesses  
 { get { return openBusinessProcesses; } }

ObservableCollection 字段事件处理程序 -

    private void AttachEventHandlers()
    {
        openBusinessProcesses.CollectionChanged += openBusinessProcesses_CollectionChanged;
    }

    void openBusinessProcesses_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        logger.Info(String.Format("OpenBusinessProcess collection changed. Action: {0}, Added: {1}, Removed: {2}", e.Action, e.NewItems, e.OldItems));
    }
4

1 回答 1

0

谢谢阿列克谢。你让我走上正轨。

我忘了我在视图中添加了自动装配,所以我有两个视图模型实例。

这是我从 xaml 标记中删除的部分 -

viewModel:ViewModelLocator.AutoWireViewModel="True"   

为清楚起见更新 -
ObservableCollection 没有被清空。视图中的自动装配以及显式模型创建导致了视图模型的两个实例。

于 2015-02-15T04:39:14.517 回答