Я довольно новичок в разработке WPF, и в настоящее время я пытаюсь использовать MVVM для разработки моих приложений. Я много читал о просмотрах навигации и переключения MVVM, но я не могу найти решение для текущей ситуации. Поясним, что это такое: Прежде всего, у меня есть мой основной вид элемент, DockPanel, с некоторыми фиксированными зонами, а также главной «динамической» область, где содержание должно меняться в зависимости от действий:навигация/загрузка различных представлений на WPF/MVVM
<DockPanel>
<Label Content="Top Fixed element"/>
<StackPanel Orientation="Vertical" Height="auto" Width="150" DockPanel.Dock="Left">
<Label Content="SomeOptions"/>
<!-- some more elements -->
</StackPanel>
<Label DockPanel.Dock="Bottom" Content="Foot"/>
<ContentControl Content="{Binding CurrentMainViewElementViewModel}"/>
</DockPanel>
Я определил некоторые DataTemplates, что я хотел бы загрузить в этом ContentControl, здесь есть один из шаблонов данных в качестве примера:
<Window.Resources>
<DataTemplate DataType="{x:Type ViewModel:FileLoaderVM}">
<View:FileLoaderView/>
</DataTemplate>
</Window.Resources>
Это FileLoader (и вид модели выполнены с использованием RelayCommand и INotifyPropertyChanged) открывает диалоговое окно после нажатия кнопки, где после выбора файла он открывается и анализируется, и sh все найденные элементы внутри ListView с множественным выбором (в данном случае лицами с их данными). Теперь я хочу загрузить другой элемент управления пользователя в этом ContentControl, когда я нажимаю кнопку. Эта кнопка определяется в моей модели представления, как это:
public ICommand LoadPersons
{
get { return new RelayCommand(param => this.loadSelectedPersons(), param => (SelectedPersons!=null && SelectedPersons.Any()));}
}
Мой вопрос приходит в этот момент, как я могу изменить содержание ContentControl, загружая другой пользовательский элемент управления вместо текущего непосредственно с моей точки зрения модели (в этом «this.loadSelectedPersons()»)? Если это невозможно, как мне подойти, чтобы решить эту проблему? Рядом с этим действием я хочу показать все ранее выбранные элементы и манипулировать различными способами (вставка в БД, сохранение в другом файле и т. Д.), И у меня уже есть для этого соответствующий элемент управления пользователя, который я бы как показано в элементе моего основного вида в разделе ContentControl, сохраняя остальные элементы, поскольку они изначально.
Вы возвращаете новую ICommand при каждом обращении к объекту? Это совсем не так. – Will