我有一个带有主细节页面的Xamarin.Forms应用程序,它工作得很好。
但是最近我需要向母版页(AttendPageMaster)的构造函数添加一个参数,但是现在我需要传递这个构造函数。
如何向xaml中添加参数?
<MasterDetailPage.Master>
<pages:AttendPageMaster x:Name="MasterPage" />
</MasterDetailPage.Master>
带有构造函数的页面后面的代码:
public AttendPageMaster(AttendanceViewModel viewModel)
{
}
如果你需要更多的信息,请告诉我。
发布于 2018-05-29 06:02:35
您不必通过构造函数将ViewModel
传递给Page
,您可以设置页面的BindingContext
<MasterDetailPage.Master>
<pages:AttendPageMaster x:Name="MasterPage">
<pages:AttendPageMaster.BindingContext>
<myViewModels:AttendanceViewModel />
</pages:AttendPageMaster.BindingContext>
</pages:AttendPageMaster>
</MasterDetailPage.Master>
如果您的ViewModel
不需要构造函数中的任何参数,则此解决方案将有效。否则,可以考虑使用ViewModelLocator
和DI
注入构造函数参数。
请注意,myViewModels
应该在XAML页面的标题中定义为xmlns:myViewModels
。
P.S.:之前您提到,您在尝试使用后面的代码时遇到了异常。您可以通过设置Title
属性轻松地解决这个问题。示例:
new AttendPageMaster(new AttendanceViewModel()){ Title = " " };
发布于 2018-05-30 08:54:49
我通过在主细节的构造函数中创建菜单页面并将其分配给"Master“属性,从而从后面的代码中成功地做到了这一点:
AttendMasterPageMaster MasterPage;
public AttendMasterPage(AttendanceViewModel viewModel)
{
MasterPage = new AttendMasterPageMaster(viewModel);
Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(StartPage), viewModel));
Master = MasterPage;
https://stackoverflow.com/questions/50585753
复制