在 TabControl.ContentTemplate 中使用 ViewLocator

乔治·T

在AvaloniaUI窗口,我想有一个TabControl,其选项卡添加和删除的ObservableCollection<T>标签的“标题”(出现在标签条上的文本)应该设置在集合的每个项目中,这些项目可能属于不同的类型。

为此,我定义了一个类型:

public abstract class TabViewModelBase : ViewModelBase
{
    public abstract string TabHeader { get; }
}

我的收藏是这样定义的:

public ObservableCollection<TabViewModelBase> OpenTabs { get; } = new();

在 axaml 文件中,这是以下内容的定义TabControl

<TabControl Items="{Binding OpenTabs}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding TabHeader}"/>
        </DataTemplate>
    </TabControl.ItemTemplate>
</TabControl>

到目前为止,这就像一个魅力。

当我还想为每个选项卡内的视图设置一个容器时,问题就开始了,它不应该是包含的视图本身的一部分。我已经尝试通过编辑上面的 xaml 并设置ContentTemplate如下:

<TabControl Items="{Binding OpenTabs}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding TabHeader}"/>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <Border Child="{Binding}"/>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

但是,这会导致以下错误:

[Binding] Error in binding to 'Avalonia.Controls.Border'.'Child': 'Could not convert 'Project.ViewModels.TestingViewModel' to 'IControl'.'

这似乎是因为ViewLocator没有调用根据名称自动将视图模型与视图匹配的 。我认为这是因为我定义了一个DataTemplateinside TabControl.ContentTemplate

是否可以指示 Avalonia 使用ViewLocatorinside TabControl.ContentTemplate,以便根据其名称选择视图?

轻笑

<Border Child="{Binding}"/>

Border 期望实际控件作为子控件,而不是视图模型。你需要ContentControl改用。它还可以拥有自己的数据模板或视图定位器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

WPF:TabControl.ItemTemplate和TabItem.ContentTemplate之间的区别

在Windows Phone中使用C#而不是XAML的ContentTemplate

如何将WPF TabControl ContentTemplate绑定到不同ViewModel的可观察集合

如何使用Prism的viewlocator将多个ViewModel连接到单个View?

如何在TabControl模板中使用自定义TabItem?

使用拖放移动TabControl TabItems

如何使用 ReactiveUI 设置动态填充的 TabControl?

如何使用从.xaml中的TabControl继承的类?

使用TabControl和MVVM时绑定丢失

使用TabControl时,SciChart CompositeAnnotation消失

更改TabControl的未使用空间的颜色

使用FlipView在Metro Apps中创建TabControl

使用 TabControl (MVVM) 显示不同的 ViewModel

公开 UserControls ContentTemplate

在TabControl中使用DataGridView自动调整Windows窗体的功能不起作用

TabControl WPF中的TabControl

以编程方式设置HubSection ContentTemplate

使用TabControl和MVVM在WPF中进行正确的数据绑定

如何使用 Caliburn.Micro 和不同的 UserControl 制作 TabControl

使用MVVM删除与所选控件不同的TabControl选项卡

Wpf 使用棱镜动态向 tabcontrol 添加更多视图

使用TabControl ImageList的TabPage标头中的低质量图像

如何使用标签隐藏/显示 TabControl C# 中的控件

TabControl 的 BusyIndicator

具有不同名称空间的Caliburn Micro ViewLocator

WPF - 在 RepeatButton 的 DataTrigger 中更改 ContentTemplate

在ContentTemplate内设置XAML Textblock内容

使用父级SelectedItem和ICommand进行主细节TabControl绑定(1:n)

C#使用自定义TabPage更改TabControl中的默认TabPage