У меня есть главный вид с панелью инструментов и областью TabControl, которая имеет два вида зарегистрированных: View A, View B. Все представления должны иметь в качестве DataContext один и тот же экземпляр ContactsViewModel, но на самом деле каждое представление создает новый экземпляр 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; }
}
}
View B аналогична Вид A.
И это представляет собой ViewModel:
public class ContactsViewModel : BindableBase
{
private readonly IRegionManager regionManager;
private readonly IEventAggregator eventAggregator;
private readonly IConfigurationContactsService contactsService;
private readonly DelegateCommand<object> deleteContactCommand;
private ObservableCollection<Contact> contactsCollection;
private ICollectionView contactsView;
public ContactsViewModel(IEventAggregator eventAggregator, IConfigurationContactsService contactsService, IRegionManager regionManager)
{
this.regionManager = regionManager;
this.contactsService = contactsService;
this.eventAggregator = eventAggregator;
this.deleteContactCommand = new DelegateCommand<object>(this.DeleteContact, this.CanDeleteContact);
this.contactsCollection = new ObservableCollection<Contact>(contactsService.GetContacts());
this.contactsView = CollectionViewSource.GetDefaultView(this.contactsCollection);
}
public ICollectionView ContactsView
{
get { return this.contactsView; }
}
public ObservableCollection<Contact> Contacts
{
get { return this.contactsCollection; }
}
public ICommand DeleteContactCommand
{
get { return this.deleteContactCommand; }
}
private void DeleteContact(object ignore)
{
IList<Contact> selectedContacts = contactsService.GetSelectedContacts();
foreach (Contact contact in selectedContacts)
{
if (contact != null)
{
contactsService.DeleteContact(contact);
}
}
SetProperty<ObservableCollection<Contact>>(ref this.contactsCollection, new ObservableCollection<Contact>(contactsService.GetContacts()), "Contacts");
}
private bool CanDeleteContact(object ignored)
{
return contactsService.GetSelectedContacts().Any();
}
}
Как я могу использовать ContactsListView (здесь называется View A), чтобы иметь тот же экземпляр ContactsViewModel, что и MainView?
Editted
код в главном и вид в Editted так в главном представлении я зарегистрировать ViewModel в контейнер и в View А я Устраните ViewModel. Еще три экземпляра. Когда модель просмотра разрешена, создается новый экземпляр.
Похоже, вы получаете 'ContactViewModel' из контейнера IoC. Вы задумались о том, чтобы зарегистрировать это как одноэлемент? –
Я только что попробовал, и у меня все еще есть три экземпляра ContactsViewModel. (Я изменил свой вопрос с новым кодом). Я сделал это: в главном представлении я зарегистрирую ContactViewModel в контейнере; в представлении A Я разрешаю ContactsViewModel из контейнера. Это ты имел в виду? Что такое ocurring, так это то, что каждый раз, когда я разрешаю ContactsViewModel, создается новый экземпляр. – chincheta73
Вы не регистрируете модель представления как одноэлементный. Узнайте, как это сделать: https://msdn.microsoft.com/en-us/library/ff647854.aspx –