XAML 如何使用ContentTemplate将构造函数参数传递给Page

vptzau2j  于 2023-04-03  发布在  其他
关注(0)|答案(2)|浏览(134)

我试图在Shell中向ContentPage传递一个构造函数参数,如下所示:

<FlyoutItem Title="Page1" >
    <ShellContent Title="Page1"
                  Route="Page1" ContentTemplate="{DataTemplate views:Page1}"/>
</FlyoutItem>

我无法找到一种方法来实现这一点。
下面的代码可以工作,但是它在应用程序启动时加载页面,这太慢了。

<FlyoutItem Title="Page1" >
    <ShellContent Title="Page1"
                  Route="Page1">
        <views:Page1>
            <x:Arguments>
                <x:Int32>
                    0
                </x:Int32>
            </x:Arguments>
        </views:Page1>
    </ShellContent>
</FlyoutItem>

我需要一种使用ContentTemplate/DataTemplate方法传递构造函数参数的方法

x7yiwoj4

x7yiwoj41#

您也可以使用BindableProperty来实现这一点。
可以在ContentPage中创建可绑定属性。
请参考以下代码:

public partial class MainPage : ContentPage 
{
      public MainPage()
      {
            InitializeComponent();
      }

    protected override void OnAppearing()
    {
        base.OnAppearing();

        // Get the value here
        System.Diagnostics.Debug.WriteLine("-----------> arg is : " + Arg);
    }
    //add property Arg
    public string Arg
    {
        set { SetValue(ArgProperty, value); }
        get { return (string)GetValue(ArgProperty); }
    }
    public static readonly BindableProperty ArgProperty = BindableProperty.Create(nameof(Arg), typeof(string), typeof(MainPage), string.Empty);

}

用法示例:

<FlyoutItem Title="Page1" > 
    <ShellContent Title="Page1"
              Route="Page1">
        <local:MainPage Arg="test">

        </local:MainPage>
    </ShellContent>
</FlyoutItem>
jtw3ybtb

jtw3ybtb2#

解决方案是通过DataTemplate传递所有数据,如下所示:

<FlyoutItem Title="Page1" >
    <ShellContent Title="Page1"
                  Route="Page1">
        <ShellContent.ContentTemplate >
            <DataTemplate>
                <views:Page1>
                    <x:Arguments>
                        <x:Int32>
                            0
                        </x:Int32>
                    </x:Arguments>
                </views:Page1>
            </DataTemplate>
        </ShellContent.ContentTemplate>
    </ShellContent>
</FlyoutItem>

相关问题