私はツールバーと2つのビューが登録されたTabControlリージョンを持っています:View A、View BすべてのビューはContactsViewModelの同じインスタンスをDataContextとして持つべきですが、 ContactsViewModelの新しいインスタンスビューモデルが複数回インスタンス化されました。 (PRISM)
これは、メインビューのコードビハインドである:
public partial class ContactsView : UserControl
{
public IRegionManager regionManager;
private static Uri listViewUri = new Uri("/ContactsListView", UriKind.Relative);
private static Uri tilesViewUri = new Uri("/ContactsTilesView", UriKind.Relative);
public ContactsView(ContactsViewModel contactsViewModel, IRegionManager regionManager, IUnityContainer container)
{
this.ViewModel = contactsViewModel;
container.RegisterType<ContactsViewModel>();
this.regionManager = regionManager;
InitializeComponent();
}
public ContactsViewModel ViewModel
{
get { return this.DataContext as ContactsViewModel; }
set { this.DataContext = value; }
}
}
これはコードビハインド図である。
public partial class ContactsListView : UserControl
{
public ContactsListView(IUnityContainer container)
{
ContactsViewModel viewModel = container.Resolve<ContactsViewModel>();
this.ViewModel = viewModel;
InitializeComponent();
SetupColumns();
}
public ContactsViewModel ViewModel
{
get { return this.DataContext as ContactsViewModel; }
set { this.DataContext = value; }
}
}
ビューBはA.
そして、これを見ると似ていますViewModelです:
ContactViewView(ここではView Aと呼ばれます)をMainViewと同じContactsViewModelのインスタンスにするにはどうしたらいいですか?
メインビューでEDITTED
コードと見る私はのviewmodelを解決メインビューに私を容器にし、ビューAでビューモデルを登録してeditted。まだ3つのインスタンスを取得しています。ビューモデルが解決されると、新しいインスタンスが作成されます。
をあなたはIoCコンテナから 'ContactViewModel'を得ているように見えます。あなたはそれをシングルトンとして登録する考えを調べましたか? –
私はちょうどそれを試みたが、私はまだContactsViewModelの3つのインスタンスを取得します。 (私は新しいコードで私の質問を編集しました)。私がやったのは、メインビューでContactsViewModelをコンテナに登録することです。ビューAでは、コンテナからContactsViewModelを解決します。それはあなたが意味することですか? ocurringとは、ContactsViewModelを解決するたびに新しいインスタンスが作成されるということです。 – chincheta73
ビューモデルをシングルトンとして登録していません。方法はこちらをご覧ください:https://msdn.microsoft.com/en-us/library/ff647854.aspx –