使用管弦乐队/ Catel动态创建选项卡项目和选项卡内容

问题描述

我正在尝试使用Orchestra / Catel创建一个选项卡式界面。我将选项卡定义加载到TabInfo类中。这些工作正常-使用正确的选项卡描述创建选项卡式界面。在每个选项卡的内容中,我想创建一个按钮列表-再次加载到ButtonInfo类中。选择选项卡时,SelectedTab属性用于选择正确的按钮列表(ShowButtons)。

我已经跟踪了该程序,并且当我单击选项卡时,ShowButtons中包含正确的按钮集合,但是选项卡内容中没有任何显示。我确实可以在普通的MVVM程序中使用它,但是没有选项卡。我使用了列表视图来显示我的标签,并使用ItemsControl来显示按钮。

以下是我的选项卡的XAML代码和用于拉动按钮的SelectedTab逻辑。

<Grid>
    <orccontrols:TabControl LoadTabItems="LazyLoading" ItemsSource="{Binding TabInfo}" SelectedItem="{Binding SelectedTab}">
        <TabControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding TabDesc}"/>
            </DataTemplate>
        </TabControl.ItemTemplate>
        <TabControl.ContentTemplate>
            <DataTemplate>
                <ItemsControl ItemsSource="{Binding ShowButtons}">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <WrapPanel Orientation="Vertical" IsItemsHost="True"/>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Button Content="{Binding ButtonDesc}"
                                    MinWidth="150" 
                        Height="30" 
                        FontSize="12" 
                        FontWeight="Bold" 
                        Margin="0,15,25,10" 
                        Padding="5,1">
                                <Button.Style>
                                    <Style>
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding OracleJob}" Value="0">
                                                <Setter Property="Button.Background" Value="DarkSalmon" />
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </Button.Style>
                            </Button>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </DataTemplate>
        </TabControl.ContentTemplate>
    </orccontrols:TabControl>
</Grid>

以及用于填充ShowButtons的代码:

public void OnSelectedTabChanged()
    {
        int _selectTab = SelectedTab.TabKey;
        var _showButtons = ButtonInfo.Where(i => i.ButtonTab == _selectTab);
        ObservableCollection<ButtonRecord> _btn = new ObservableCollection<ButtonRecord>(_showButtons);
        ShowButtons = _btn;
    }

任何帮助将不胜感激。我是Orchestra / Catel的初学者,所以我可能缺少最佳的方法。

解决方法

我建议从Orchestra / Catel拆分问题。 Orchestra允许您提供作为外壳的视图,但是该视图可以单独存在(Orchestra唯一要做的就是将其放置在外壳内的正确位置内)。通过使这个问题与乐团无关,可以使我们更容易解决。

接下来,我建议您查阅Catel文档。有一个完整的示例,说明如何显示带有带有可关闭标签按钮的标签的外壳,请参见https://docs.catelproject.com/vnext/tips-tricks/mvvm/using-tabbed-interface-with-mvvm/

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...