Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ObservableCollection将丢失其集合_C#_Wpf_Unity Container_Prism_Prism 5 - Fatal编程技术网

C# ObservableCollection将丢失其集合

C# ObservableCollection将丢失其集合,c#,wpf,unity-container,prism,prism-5,C#,Wpf,Unity Container,Prism,Prism 5,使用带棱镜和统一的WPF- 我有一个奇怪的缺陷,一个可观察的集合正在丢失它的集合 我添加了一个真实的支持字段,以查看自动属性是否发生了有趣的事情 我在字段中添加了CollectionChanged事件处理程序,该处理程序仅在我期望的时候触发 我使用ServiceLocator来检索实例,所以我想可能我得到的是另一个实例,但是其他属性和字段具有以前访问的预期值 存储ViewModel- this.Container.RegisterInstance( new ShellViewModel(), n

使用带棱镜和统一的WPF-

我有一个奇怪的缺陷,一个可观察的集合正在丢失它的集合

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

我在字段中添加了CollectionChanged事件处理程序,该处理程序仅在我期望的时候触发

我使用ServiceLocator来检索实例,所以我想可能我得到的是另一个实例,但是其他属性和字段具有以前访问的预期值

存储ViewModel-

this.Container.RegisterInstance(
new ShellViewModel(), new ContainerControlledLifetimeManager());  
检索它-

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

谢谢Aleksey。你让我走对了路

我忘了在视图中添加了自动布线,所以我有两个视图模型的实例

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

viewModel:ViewModelLocator.AutoWireViewModel="True"   
为清晰起见更新-
观察到的集合没有被清空。视图中的自动关联以及显式模型创建导致了视图模型的两个实例

“丢失集合”是指集合变为空吗?另一种确定实例是否相同的可靠方法是:检查object.GetHashCode值。每次访问该实例时,该值都应相同,否则会有不同的实例。是的,集合将变为空。感谢HashCode提醒。它不是同一个实例。@AlekseyShubin GetHashCode返回的值不唯一。当然,两个或多个单独的实例可能具有相同的哈希代码。该方法应用于检查两个实例是否相同。@如果检查代码中的实例,StevenRands肯定会同意。但在调试的情况下,您甚至可能没有像作者的情况那样同时引用两个对象,因此您不能使用ReferenceEquals。在我看来,GetHashCode是一个很好的替代方案,虽然它不能提供100%的置信度,但出于调试目的,99.9%左右的置信度也可以。这不是一个答案。是的,这是一个答案。视图模型有两个实例;可观察到的集合并没有真正被清空。
public ObservableCollection<BusinessProcessViewModel> OpenBusinessProcesses  
 { get { return openBusinessProcesses; } }
    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));
    }
viewModel:ViewModelLocator.AutoWireViewModel="True"