Даниил Линник
Знаток
(472)
5 месяцев назад
Вы можете посмотреть примеры реализации подобных сервисов на специализированных форумах, в официальной документации WPF или в открытых исходных кодах проектов на GitHub. Также рекомендую обратить внимание на уроки и курсы по WPF и MVVM, где такие сервисы обычно рассматриваются в рамках обучения.
Вот пример простого сервиса для управления окнами в WPF/MVVM:
csharp
public class WindowManager
{
private Dictionary<Type, Window> _windows = new Dictionary<Type, Window>();
public void ShowWindow<T>() where T : Window, new()
{
Type windowType = typeof(T);
if (!_windows.ContainsKey(windowType))
{
T window = new T();
_windows.Add(windowType, window);
window.Closed += (sender, args) => _windows.Remove(windowType);
window.Show();
}
else
{
_windows[windowType].Activate();
}
}
public void CloseWindow<T>() where T : Window
{
Type windowType = typeof(T);
if (_windows.ContainsKey(windowType))
{
_windows[windowType].Close();
_windows.Remove(windowType);
}
}
}
Теперь вы можете использовать этот сервис в своем ViewModel для управления окнами:
csharp
public class MainViewModel : ViewModelBase
{
private readonly WindowManager _windowManager = new WindowManager();
public ICommand ShowPopupCommand => new RelayCommand(() => _windowManager.ShowWindow<PopupWindow>());
public ICommand ClosePopupCommand => new RelayCommand(() => _windowManager.CloseWindow<PopupWindow>());
}
Где `PopupWindow` - это класс вашего окна, который вы хотите управлять. Вам нужно только вызвать соответствующую команду в вашем ViewModel для открытия и закрытия окна.
Avataria 2Ученик (51)
5 месяцев назад
Чтобы передать класс окна надо дать во ViewModel ссылку на View, а этого вроде делать нельзя....