XAML .NET MAUI - Tabview内容使用新页面名称的绑定模型

gmxoilav  于 2023-06-19  发布在  .NET
关注(0)|答案(1)|浏览(228)

我目前有一个选项卡视图,它将内容视图作为视图中的单独页面打开。我已经绑定了标签和图像,也有一个页面要调用的绑定项,我在标记的行上挣扎着使用我的绑定值:
我的主要内容如下:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            x:Class="MauiApp1.StaticTabView"
            xmlns:local="clr-namespace:MauiApp1"
             xmlns:page="clr-namespace:MauiApp1.View"
            xmlns:tabView="clr-namespace:Syncfusion.Maui.TabView;assembly=Syncfusion.Maui.TabView"
            BackgroundColor="Black">
    <ContentPage.BindingContext>
        <local:TabItemsSourceViewModel />
    </ContentPage.BindingContext>
    <tabView:SfTabView ItemsSource="{Binding TabItems}" TabBarHeight="72" >
        <tabView:SfTabView.HeaderItemTemplate>
            <DataTemplate>
                <StackLayout>
                    <Image Source="{Binding ImageName}" HeightRequest="72" WidthRequest="72"/>
                </StackLayout>    
            </DataTemplate>
        </tabView:SfTabView.HeaderItemTemplate>
        <tabView:SfTabView.ContentItemTemplate>
            <DataTemplate>
                <page:test /> <!-- Here is my Issue I need to bind this value -->
            </DataTemplate>
        </tabView:SfTabView.ContentItemTemplate>    
    </tabView:SfTabView>    
</ContentPage>

对于Line,我有一个名为test的页面,它会调用它,但我需要它是动态的和绑定的:

<page:test />

我希望或试图把类似的东西,这不起作用,我不知道如何得到一个绑定值在这一节。:-

<page: "{Binding PageName}" />

对于我的生活,我不知道如何做到这一点:)
任何帮助都将不胜感激,提前感谢您。

mqxuamgl

mqxuamgl1#

给定一个包含页面名称的字符串,创建一个包含该页面示例的DataTemplate。
这可以使用IValueConverter来完成。
用途:

<ContentPage ...
             xmlns:local="clr-namespace:YourNameSpace"
             x:Class=... >
    <ContentPage.Resources>
        <local:NameToPageTemplateConverter x:Key="nameToPageTemplateConverter" />
    </ContentPage.Resources>
    ...
    <tabView:SfTabView ...
        ContentItemTemplate="{Binding PageName, Converter={StaticResource nameToPageTemplateConverter}}"
        ... >
        <tabView:SfTabView.HeaderItemTemplate>
        ...
    </tabView:SfTabView>

其中PageName是当前BindingContext中的属性,类似于ImageName
声明:包含NameToPageTemplateConverter的.cs文件:

namespace YourNameSpace   <-- must match namespace in `xmlns:local` declaration above.
{
  public class NameToPageTemplateConverter : IValueConverter
  {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        switch ((string)value)
        {
            case "Page1":
                return new DataTemplate(typeof(Page1));
            case "Page2":
                return new DataTemplate(typeof(Page2));
            default:
                throw new InvalidProgramException("Unknown page name");
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
  }
}

相关问题