代码之家  ›  专栏  ›  技术社区  ›  the_tr00per

Xamarin表单-向MasterDetailPage.Master添加构造函数

  •  2
  • the_tr00per  · 技术社区  · 6 年前

    我有一个Xamarin.forms的应用程序,它有一个主细节页面,并且工作得很好。

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

    如何向XAML添加参数?

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

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

    public AttendPageMaster(AttendanceViewModel viewModel)
    {
    }
    

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

    2 回复  |  直到 6 年前
        1
  •  2
  •   EvZ    6 年前

    你不必通过 ViewModel Page 通过构造函数,可以设置页面的 BindingContext :

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

    如果您的 视图模型 构造函数中不需要任何参数。否则,您可以考虑使用 ViewModelLocator DI 注入构造函数参数。
    请注意 myViewModels 应在XAML页的标题中定义为 xmlns:myViewModels .

    P.S.:之前您提到过,在尝试使用代码隐藏方法时遇到了一个异常。您可以通过设置 Title 的属性 AttendPageMaster . 例子:

    new AttendPageMaster(new AttendanceViewModel()){ Title = " " };
    
        2
  •  0
  •   the_tr00per    6 年前

    我通过在masterdetail的构造函数中创建菜单页并将其分配给“master”属性,成功地从后面的代码中实现了这一点:

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