在表单上添加选项卡项是有效的,但不能在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上使用

我将假设UserControl是主窗口,但是选项卡被绑定在主窗口中。如果是这样的话,我看到你有MainWindowViewModel的不同实例。

在MainWindow中创建MainWindowViewModel的一个实例。

<Window.DataContext>
    <local:MainWindowViewModel/>
</Window.DataContext>

这会在usercontrol中创建另一个

<UserControl.DataContext>
    <local:MainWindowViewModel/>
</UserControl.DataContext>

所以在用户控件的ViewModel中添加新选项卡不会在绑定选项卡的MainWindow中添加它。

相关文章: