2016-10-08 3 views
0

Я пишу небольшое приложение WPF с 3 страницами (на данный момент). Я использую DataTemplate и ContentControl в главном окне для отображения и переключения между моими страницами. (См. Пример кода ниже). Он работает, но у меня есть несколько вопросов:Навигация между страницами

  1. В DataTemplate используется только конструктор без параметров. Если я добавлю его, то он не сможет найти конструктор.

  2. «Регистрация» выполняется в xaml, и я не могу использовать Dependency Injection для ссылки Views с ViewModels.

Вопросы:

Есть ли способ, чтобы изменить это без использования инструмента стороннего?

Если единственным полезным вариантом является использование инструмента, с какими из них следует учитывать?

<Window.Resources> 
    <DataTemplate DataType="{x:Type pageViewModels:HomePageViewModel}"> 
     <pageViews:HomePageView /> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type pageViewModels:GamePageViewModel}"> 
     <pageViews:GamePageView /> 
    </DataTemplate> 
</Window.Resources> 

<DockPanel> 
    <Border DockPanel.Dock="Left" BorderBrush="Black" BorderThickness="0,0,1,0"> 
     <ItemsControl ItemsSource="{Binding PageViewModels}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Button Content="{Binding Name}" 
          Command="{Binding DataContext.ChangePageCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
          CommandParameter="{Binding }" 
          Margin="2,5"/> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </Border> 

Редактировать Чтобы уточнить, я хочу, чтобы ввести класс в конструкторе моих viewsModels, но если я это сделаю, то навигация в моем приложении нарушается, потому что DataTemplate ищет конструктор без параметров.

+0

Непонятный вопрос. Что вы пытаетесь достичь? – AnjumSKhan

+0

Я пытаюсь ввести еще один класс в конструкторы моих viewModels, но я не могу, потому что объявление в xaml использует конструктор без параметров. Я хочу найти способ исправить точки 1) и 2), которые перечислены выше. –

+0

создание режимов просмотра должно обрабатываться другими режимами просмотра (или вашим инициализатором приложения при вводе приложения). все, что вам нужно сделать, это объявить, как оно отображается. пока это выглядит хорошо. показать больше своего кода виртуальной машины - вы, вероятно, просто немного от шаблона, так как это кажется проблемой для вас прямо сейчас :) – Dbl

ответ

0

Похоже, что моя проблема была очень хорошо объяснена в этом post.

Короче говоря, мне нужно реализовать шаблон ViewModelLocator, чтобы исправить все мои проблемы.

Смежные вопросы