0

Prism と Unity で WPF を使用する -

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

ありがとうアレクセイ。あなたは私を正しい軌道に乗せました。

ビューに自動配線を追加したことを忘れていたため、ビュー モデルのインスタンスが 2 つありました。

これは、xaml マークアップから削除した部分です -

viewModel:ViewModelLocator.AutoWireViewModel="True"   

明確にするために更新 -
ObservableCollection は空ではありませんでした。ビューでの自動配線と明示的なモデルの作成により、ビュー モデルの 2 つのインスタンスが作成されました。

于 2015-02-15T04:39:14.517 に答える