Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将WinUI 3中的TabItemTemplateSelector与TemplateSelector结合使用会产生奇怪的嵌套控件 导言:_C#_Winui 3 - Fatal编程技术网

C# 将WinUI 3中的TabItemTemplateSelector与TemplateSelector结合使用会产生奇怪的嵌套控件 导言:

C# 将WinUI 3中的TabItemTemplateSelector与TemplateSelector结合使用会产生奇怪的嵌套控件 导言:,c#,winui-3,C#,Winui 3,我目前正在开发一个应用程序,数据应该显示在选项卡视图中。默认情况下,“主页”选项卡将打开,显示列表框。单击此框中的条目后,将在新选项卡中打开详图视图 该应用程序是在MVVM体系结构中创建的。“MainViewModel”包含一个集合,其中ViewModels填充了选项卡视图。我正在尝试使用DataTemplateSelector根据ViewModel类切换DataTemplates 项目正在使用以下依赖项: <PackageReference Include="Community

我目前正在开发一个应用程序,数据应该显示在选项卡视图中。默认情况下,“主页”选项卡将打开,显示列表框。单击此框中的条目后,将在新选项卡中打开详图视图

该应用程序是在MVVM体系结构中创建的。“MainViewModel”包含一个集合,其中ViewModels填充了选项卡视图。我正在尝试使用DataTemplateSelector根据ViewModel类切换DataTemplates

项目正在使用以下依赖项:

<PackageReference Include="CommunityToolkit.Mvvm" Version="7.0.2" />
<PackageReference Include="CommunityToolkit.WinUI.UI.Controls" Version="7.0.2" />
<PackageReference Include="Microsoft.ProjectReunion" Version="0.5.7" />
<PackageReference Include="Microsoft.ProjectReunion.Foundation" Version="0.5.7" />
<PackageReference Include="Microsoft.ProjectReunion.WinUI" Version="0.5.7" />

示例代码 MainWindow.xaml.cs包含ViewModels和模板选择器

使用CommunityToolkit.Mvvm.ComponentModel;
使用Microsoft.UI.Xaml;
使用Microsoft.UI.Xaml.Controls;
使用Microsoft.UI.Xaml.Controls.Primitives;
使用Microsoft.UI.Xaml.Data;
使用Microsoft.UI.Xaml.Input;
使用Microsoft.UI.Xaml.Media;
使用Microsoft.UI.Xaml.Navigation;
使用制度;
使用System.Collections.Generic;
使用System.Collections.ObjectModel;
使用System.IO;
使用System.Linq;
使用System.Runtime.InteropServices.WindowsRuntime;
使用Windows基金会;
使用Windows。
命名空间测试应用程序
{
公共密封部分类主窗口:窗口
{
公共主窗口()
{
this.InitializeComponent();
}
}
公共类选项卡ItemDataTemplateSelector:DataTemplateSelector
{
公共数据模板HomeTemplate{get;set;}
公共数据模板详细信息模板{get;set;}
受保护的覆盖数据模板SelectTemplateCore(对象项,DependencyObject容器)
{
开关(项目)
{
案例HomeTabViewModel:
返回主页模板;
案例详情选项卡视图模型:
返回详细信息模板;
违约:
抛出新ArgumentException(“作为项提供的ViewModel类型无效”);
}
}
}
公共类MainWindowViewModel:ObserveObject
{
私人可观察收集项目;
公共ObservableCollection选项卡项{get=>TabItems;set=>SetProperty(ref-TabItems,value);}
公共主窗口视图模型()
{
TabItems=新的ObservableCollection();
TabItems.Add(新HomeTabViewModel());
添加(新的DetailTabViewModel());
添加(新的DetailTabViewModel());
}
}
公共类HomeTabViewModel:ObserveObject
{
公共字符串头{get;set;}=“Home”;
公共字符串详细信息{get;set;}=“我是HomeView”;
}
公共类DetailTabViewModel:ObserveObject
{
公共字符串Title{get;set;}=“Detail”//不同的名称使类有点不同
公共字符串详细信息{get;set;}=“来自详细信息的您好!”;
}
}
MainWindow.xaml仅包含一个选项卡视图


结果 上面的代码创建了一个奇怪的嵌套结果,似乎模板被多次应用于标题和内容,结果是到处都是TabViewItems:

期望结果 奇怪的是,当我使用“内联”TabItemTemplate时,结果很好,绑定正常