【问题标题】:Xamarin Forms - Adding constructor to MasterDetailPage.MasterXamarin Forms - 将构造函数添加到 MasterDetailPage.Master
【发布时间】:2018-05-29 13:35:17
【问题描述】:

我有一个带有主-详细信息页面的 Xamarin.Forms 应用程序,它运行良好。

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

如何向 xaml 添加参数?

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

带有构造函数的页面背后的代码:

public AttendPageMaster(AttendanceViewModel viewModel)
{
}

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

【问题讨论】:

  • 此错误与构造函数参数无关。只需设置 Title 属性:。除此之外,构造函数中的参数类型是什么?
  • 对不起,我没有说清楚。使用approad背后的代码时,我只会遇到标题属性问题。我正在研究如何使用 xaml 方法将参数(自定义类型)传递给构造函数

标签: xamarin xamarin.forms master-pages


【解决方案1】:

您不必通过构造函数将ViewModel 传递给Page,您可以设置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 页面的标题中定义为 xmlns:myViewModels

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

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

【讨论】:

    【解决方案2】:

    我通过在 masterdetail 的构造函数中创建菜单页面并将其分配给“Master”属性,从后面的代码中设法做到了这一点:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 2020-06-27
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多