Я хотел бы найти простой и совместимый с MVVM способ, чтобы открыть новый вид из MainWindow.
Я уже работал с некоторыми инструкциями и учебниками. Но почему-то ни один из них не работал, или это была смесь кода.
Я хотел бы открыть представление после нажатия кнопки и отредактировать в нем ObservableCollection.
Я уже создал DataTemplates в App.xaml и сопоставил ViewModels с соответствующими представлениями. Но я не знаю, как аккуратно открыть отдельное окно из MainWindow (MainViewModel) через ICommand для другой ViewModel.





Вы не должны открывать окно прямо из MainWindow или MainWindowViewModel. Но модель представления может использовать службу для открытия окна:
public class MainWindowViewModel
{
private readonly IWindowService _service;
public MainWindowViewModel (IWindowService service)
{
_service = service;
}
//...
public void OpenWindowExecuted()
{
_service.ShowWindow();
}
}
Услуга:
public interface IWindowService
{
void ShowWindow();
}
public class WindowService : IWindowService
{
public void ShowWindow();
{
Window window = new Window()
window.Show();
}
}
Вы можете легко смоделировать сервис в своих модульных тестах.
Большое спасибо за ваш код! Как я могу запустить службу через ViewModel?
@ br0ken.pipe: я уже показывал вам пример того, как это сделать, в своем ответе. См. метод OpenWindowExecuted(). Этот метод может быть выполнен из команды, которую вызывает представление.
пользуюсь услугами. Это отдельная dll, которая предоставляет интерфейсы, которые вы вызываете из ViewModel или View. Таким образом, MvvM не ломается.