Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Где можно посмотреть примеры реализации сервиса для управления окнами в WPF/MVVM???

Avataria 2 Ученик (51), на голосовании 4 месяца назад
Не могу разобраться как работает этот сервис. Надо, чтобы через этот сервис можно было открывать и закрывать окна ни больше, ни меньше.
Голосование за лучший ответ
Даниил Линник Знаток (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 месяцев назад
Спасибо большое!
Avataria 2Ученик (51) 5 месяцев назад
Чтобы передать класс окна надо дать во ViewModel ссылку на View, а этого вроде делать нельзя....
Похожие вопросы