Here 是我对类似问题的回答,您可以在其中找到扩展的 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
}
我在实际应用程序中使用了此解决方案,因此您可以确定它可以正常工作。