Xamarin Forms - 将构造函数添加到 MasterDetailPage.Master

Xamarin Forms - Adding constructor to MasterDetailPage.Master

我有一个带有主从页面的 Xamarin.Forms 应用程序,它运行良好。

但是我最近需要在母版页(AttendPageMaster)的构造函数中添加一个参数,但是现在我需要传递这个构造函数。

如何向 xaml 添加参数?

<MasterDetailPage.Master>
    <pages:AttendPageMaster x:Name="MasterPage" />
</MasterDetailPage.Master>

带有构造函数的页面隐藏代码:

public AttendPageMaster(AttendanceViewModel viewModel)
{
}

如果您需要更多信息,请告诉我。

您不必通过构造函数将 ViewModel 传递给 Page,您可以设置页面的 BindingContext:

<MasterDetailPage.Master>
    <pages:AttendPageMaster x:Name="MasterPage">
        <pages:AttendPageMaster.BindingContext>
            <myViewModels:AttendanceViewModel />
        </pages:AttendPageMaster.BindingContext>
    </pages:AttendPageMaster>
</MasterDetailPage.Master>

如果您的 ViewModel 不需要构造函数中的任何参数,此解决方案将有效。否则,您可以考虑使用 ViewModelLocatorDI 来注入构造函数参数。
请注意,myViewModels 应在 XAML 页面的 header 中定义为 xmlns:myViewModels

P.S.: 之前您提到在尝试使用代码隐藏方法时出现异常。您可以通过设置 AttendPageMasterTitle 属性 轻松解决它。示例:

new AttendPageMaster(new AttendanceViewModel()){ Title = " " };

我通过在 masterdetail 的构造函数中创建菜单页面并将其分配给 "Master" 属性:

AttendMasterPageMaster MasterPage;

public AttendMasterPage(AttendanceViewModel viewModel)
    {
      MasterPage = new AttendMasterPageMaster(viewModel);
      Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(StartPage), viewModel));
      Master = MasterPage;