Я думаю, что ваша проблема в том, что вы не совсем понимаете паттерн MVVM; Вы по-прежнему смотрите на это, когда различные органы управления разговаривают друг с другом . Там, где в MVVM их не должно быть, каждый элемент управления взаимодействует с моделью представления независимо от всех остальных. И модель представления контролирует (и снабжает) логику, которая сообщает элементам управления, как себя вести.
Итак, в идеале вы должны иметь что-то вроде:
public ObservableCollection<ItemRecord> ListViewRecords
{
get { ... }
set { ... }
}
public IEnumerable<ItemRecord> SelectedListViewRecords {
{
get { ... }
set { ... }
}
ListViewRecords
будет привязан к свойству ItemsSource
вашего ListView
(фактические свойства могут отличаться в зависимости от используемых вами элементов управления, на данный момент я привык к Telerik Suite, так что это где моя голова). И SelectedListViewRecords
будет привязан к свойству SelectedItems
ListView
. Тогда для вашего TabControl вы должны иметь:
public ObservableCollection<MyTabItem> Tabs
{
get { ... }
set { ... }
}
public MyTabItem SelectedTab
{
get { ... }
set { ... }
}
Опять же, вы должны связать свойство Items
с Tabs
и SelectedItem
с SelectedTab
на TabControl
. Теперь ваша модель представления содержит всю логику, поэтому в вашем SelectedListViewRecords
вы можете сделать что-то вроде этого:
public IEnumerable<ItemRecord> SelectedListViewRecords {
{
get { ... }
set
{
_selectedRecords = value;
NotifyPropertyChanged("SelectedListViewRecords");
Tabs.Clear(); // Clear the existing tabs
// Create a new tab for each newly selected record
foreach(ItemRecord record in value)
Tabs.Add(new MyTabItem(record));
}
}
Таким образом, идея заключается в том, что элементы управления не делают ничего, кроме отправки и получения изменений свойств, они ничего не знают о базовых данных, логике и т. Д. Они просто показывают, что их связанные свойства говорят им показать.