Здесь - мой ответ на аналогичный вопрос, в котором вы можете найти расширенный TabControl и пример кода.
Итак, теперь я сосредоточусь на вашей конкретной реализации.В этом примере TabControl
привязано к свойству Items
, меню Список - к свойству MenuItems
.
public class MainViewModel
{
public MainViewModel()
{
MenuItems = new ObservableCollection<string>(){ "Item 1", "Item 2", "Item 3"};
this.Items = new ObservableCollection<TabItemViewModel>
{
new TabItemViewModel("Tab 1", OnItemRequestClose),
new TabItemViewModel("Tab item 2", OnItemRequestClose)
};
}
public ObservableCollection<string> MenuItems { get; set; }
public string CurrentMenuItem
{
get { return currentMenuItem; }
set
{
currentMenuItem = value;
OnPropertyChanged("CurrentMenuItem");
this.OnMenuChanged();
}
}
public ObservableCollection<TabItemViewModel> Items { get; set; }
public void OnItemRequestClose(TabItemViewModel item)
{
this.Items.Remove(item);
}
}
XAML:
<ListBox ItemsSource="{Binding MenuItems}"
SelectedItem="{Binding CurrentMenuItem, Mode=TwoWay}" />
Вы можете использоватькоманда связана с событием SelectionChanged
, но мое решение более универсально.
Реализация метода OnMenuChanged
:
private void OnMenuChanged()
{
if(this.CurrentMenuItem == "Item 1")
{
var addItem = new TabItemViewModel("Item 1", OnItemRequestClose);
addItem.Content = new SomeView() { DataContext = new SomeViewModel() };
this.Items.Add(addItem);
}
//and so on, and so forth
}
Я использовал это решение в реальном мире.приложение, так что вы можете быть уверены, что оно работает без проблем.