Как добавить DataTemplate в ресурсы? - PullRequest
2 голосов
/ 19 августа 2010

У меня есть класс Wizard, который создает мастера со страницами, определенными в том же проекте.PageViewModel отделена от PageView.PageViewModel - это обычный класс C #, производный от абстрактного класса PageViewModelBase, а PageView - это UserControl.Чтобы определить соответствие между PageViewModel и PageView, я написал следующий код для каждой страницы в моем проекте:

 <Window.Resources>
    <DataTemplate DataType="{x:Type OurNewPageViewModel}">
      <OurNewPageView />
    </DataTemplate>
  </Window.Resources>

Теперь я хочу добавить страницы в мастер, когда код пользователя вызывает конструктор моего мастера.Это означает, что для перемещения страниц View и ViewModel на сторону пользователя.Например, чтобы создать мастера с одной страницей, пользователь напишет следующий код: Wizard usersWizard = new Wizard (new usersViewModel (), new userView ());Проблема в том, что я не знаю, как обеспечить отображение между viewModel и View в моем конструкторе.Насколько я понимаю, я могу использовать два разных подхода для решения этой проблемы.Во-первых, использовать FrameworkElementFactory, но следующий код не работает:

        //let we have WelcomePageView wpview and WelcomePageViewModel wpviewmodel

        FrameworkElementFactory fef = new FrameworkElementFactory(wpview.GetType());
        DataTemplate dt = new DataTemplate();
        dt.DataType = wpview.GetType();

        dt.VisualTree = fef;

        base.Resources.Add(wpviewmodel.GetType(), dt);

Во-вторых, использовать XamlReader.Я могу создать шаблон данных, используя его, но я не знаю, как прикрепить его к ресурсам.

1 Ответ

3 голосов
/ 19 августа 2010

В вашем коде для создания DataTemplate есть пара ошибок:

  1. "dt.DataType = wpfView.GetType ()" должно быть "dt.DataType = wpfviewmodel .GetType ()"
  2. Вы должны использовать DataTemplateKey при добавлении шаблона в ResourceDictionary.

Итак, ваш код должен выглядеть примерно так:

DataTemplate dt = new DataTemplate();
dt.DataType = typeof(PageViewModel);
FrameworkElementFactory fef = new FrameworkElementFactory(typeof(PageView));
dt.VisualTree = fef;
DataTemplateKey dtKey = new DataTemplateKey(typeof(PageViewModel));
this.Resources.Add(dtKey, dt);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...