在表单上添加选项卡项是有效的,但不能在UserControl上使用
本文关键字:但不能 UserControl 添加 表单 选项 有效 | 更新日期: 2023-09-27 18:02:38
尝试制表
我有一个MainWindowView。Xaml如下:
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
<Window.Resources>
<DataTemplate DataType="{x:Type local:WorkspaceViewModel}">
<view:StartView/>
</DataTemplate>
</Window.Resources>
<Window.InputBindings>
<KeyBinding Key="N" Modifiers="Ctrl" Command="{Binding DictionaryButton}"/>
</Window.InputBindings>
<TabControl ItemsSource="{Binding Workspaces}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Header}"/>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
和UserControl StartView
<UserControl.DataContext>
<local:MainWindowViewModel/>
</UserControl.DataContext>
<Grid>
<Button Command="{Binding DictionaryButton}"/>
</Grid>
应该在加载时的第一个默认选项卡项中:
public MainWindowViewModel()
{
Workspaces = new ObservableCollection<WorkspaceViewModel>();
Workspaces.Add(new WorkspaceViewModel { Header = "Start"});
}
DictionaryButton是MainWindowViewModel中的RelayCommand。
public RelayCommand DictionaryButton
{
get { return dictionaryButton ?? (dictionaryButton = new RelayCommand(() => ShowDictionaries())); }
}
private void ShowDictionaries()
{
Workspaces.Add(new WorkspaceViewModel { Header = "New workspace"});
}
这将在制表符控件中添加新的制表项。但它没有。
在调试器中,我看到,如何在按钮单击时将项目添加到工作区,但没有实际的新选项卡项显示。
我添加了键绑定到MainWindowView到相同的命令,它的工作如预期的。如果我添加一个按钮到MainWindowView,并直接到DictionaryButton -它也工作。
但是它不能从UserControl StartView中工作。你能告诉我为什么吗?
我将假设UserControl是主窗口,但是选项卡被绑定在主窗口中。如果是这样的话,我看到你有MainWindowViewModel的不同实例。
在MainWindow中创建MainWindowViewModel的一个实例。
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
这会在usercontrol中创建另一个
<UserControl.DataContext>
<local:MainWindowViewModel/>
</UserControl.DataContext>
所以在用户控件的ViewModel中添加新选项卡不会在绑定选项卡的MainWindow中添加它。