Я хотел бы использовать новую функцию UWP -> x: Bind. Для этого все мои страницы должны иметь свойство ViewModel (как описано в учебниках). Чтобы избежать кода двуличность, я установил базовый класс следующим образом:Страница с параметром типа
public abstract class BasePage<TBaseVM> : Page, where TBaseVM : BaseVM
{
public TBaseVM VM { get; private set; }
protected BasePage()
{
DataContextChanged += (s, e) => VM = e.NewValue as TBaseVM;
}
}
Как вы можете видеть это BasePage класс содержит свойство, называемое «VM» и свойство имеет тип BaseVM. Следовательно, мне не нужно определять свойство VM для каждого производного класса.
Затем я создал страницу, полученный «MainPage» определены в XAML следующим образом:
<pages:BasePage
x:Class="Realarm.View.Pages.MainPage"
x:TypeArguments="viewModel:MainVM">
Делая это, даже Intellisense ReSharper предлагает мне свойства от «MainVM» в MainPage.xaml, таким образом, можно записать:
<ListView ItemsSource="{x:Bind VM.AlarmsVM}">
к сожалению, когда я пытаюсь построить проект, я получаю сообщение об ошибке в MainPage.gics:
S everity Код Описание проекта File Line CS0305 Ошибка Использование универсального типа 'BasePage' требует 1 аргументы типа Realarm D: ... \ Realarm \ OBJ \ x86 \ Debug \ View \ Pages \ MainPage.gics 13
Любая помощь?
Выглядит хорошо для меня. Возможно, это потому, что ваш класс отмечен как «абстрактный»? Вы не можете создать экземпляр абстрактного класса, попробуйте удалить его. –
Конечно, у меня есть классы, которые я пытаюсь создать. Вы пытались запустить код из вопроса? –
@de_ViL Вы решили это? У меня такая же проблема, и все, что я нахожу, говорит, что она должна работать, но я получаю ту же ошибку, что и вы. – thorkia