Xamarin Forms: вспомогательный класс MasterPage

Мое текущее приложение имеет несколько основных страниц сведений. Я хочу создать вспомогательный класс, который имеет функцию, которая принимает список PageModels-Pages (ViewModels-views), которые я могу перебирать и создавать основные страницы сведений.

Мой текущий код:

public static Page SetupMasterDetailNav<T,U>( Dictionary<T,string> Menu) 
        where T : class 
         //In Dictionary T is ViewModel(PageModel) , 
          String is name displayed on Master page  
    {
        var masterDetail = new FreshMasterDetailNavigationContainer();

        foreach (KeyValuePair<T,string> item in Menu)
        {
            masterDetail.AddPage<item.Key>(item.Value); 
        }
        masterDetail.Init("");
        return masterDetail;
    }

Этот код не работает. Он говорит мне, что item.key является переменной и не может использоваться как тип. Может ли кто-нибудь предложить мне лучший подход или как еще я могу достичь своей цели?


person TheDeveloper    schedule 23.09.2016    source источник


Ответы (1)


Метод AddPage<T> является универсальным методом, который ожидает тип. В данном случае это FreshBasePageModel. Обычное использование будет примерно таким:

masterDetail.AddPage<MyViewModel>("MyPage", model);

or:

masterDetail.AddPage<MyViewModel>("MyPage");

Поскольку ваш метод уже является универсальным, и, похоже, вы хотите, чтобы он был типом ViewModel, который вы могли бы просто сделать:

masterDetail.AddPage<T>(item.Value);

Для этого вы должны изменить сигнатуру вашего метода на что-то вроде:

public static Page SetupMasterDetailNav<T,U>(Dictionary<T,string> Menu) 
    where T : FreshBasePageModel

Не уверен, для чего в вашем случае используется U, вы не показали его использование.

Зачем ты вообще это делаешь, меня озадачивает.

person Cheesebaron    schedule 23.09.2016
comment
Забыл удалить U. Если бы мне пришлось создать вспомогательный метод, в котором я передаю модели представления для создания главной страницы сведений. Какой подход был бы лучше? Как вы сказали, masterDetail.AddPage<MyViewModel>("MyPage"); - это обычное использование, но вместо использования «MyViewModel» и «MyPage» я хочу передать список всех моделей представлений, которые я хочу создать. - person TheDeveloper; 23.09.2016
comment
Как вы составляете этот список? - person Cheesebaron; 23.09.2016
comment
В нашем приложении у нас есть несколько основных страниц сведений, поэтому я хочу создать одну вспомогательную функцию, к которой я мог бы обращаться всякий раз, когда я хочу создать главную страницу сведений. Я хочу вызвать вспомогательный класс и передать список моделей представления (может быть, использовать словарь?) и его имя, которое может быть повторено вспомогательной функцией для создания главной страницы сведений. - person TheDeveloper; 23.09.2016
comment
Если я хочу иметь страницу master-detail с тремя элементами settingsviewmodel,signoutViewModel, reportViewModel, то я хочу передать эти три модели представления во вспомогательный класс вместе со строкой, которая должна отображаться на странице, которую может искать вспомогательная функция. и помогите создать основную страницу сведений. Имеет ли это смысл ? - person TheDeveloper; 23.09.2016