Xamarin Forms - Добавление конструктора в MasterDetailPage.Master - PullRequest
0 голосов
/ 29 мая 2018

У меня есть приложение Xamarin.Forms со страницей мастер-страницы, и оно хорошо работает.

Но недавно мне нужно было добавить параметр в конструктор мастер-страницы (AttendPageMaster), но сейчасМне нужно передать этот конструктор.

Как добавить параметр в xaml?

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

Код страницы с конструктором:

public AttendPageMaster(AttendanceViewModel viewModel)
{
}

Позвольте мнезнать, если вам нужна дополнительная информация.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Мне удалось сделать это из кода позади, создав страницу меню в конструкторе masterdetail и присвоив его свойству "Master":

AttendMasterPageMaster MasterPage;

public AttendMasterPage(AttendanceViewModel viewModel)
    {
      MasterPage = new AttendMasterPageMaster(viewModel);
      Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(StartPage), viewModel));
      Master = MasterPage;
0 голосов
/ 29 мая 2018

Вам не нужно передавать 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.

PS: Ранее вы упоминали, что получили исключение при попытке использовать подход кода.Вы можете легко решить эту проблему, установив Title свойство AttendPageMaster.Пример:

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