1. 项目背景与核心价值
在WPF应用开发中,窗体管理和用户交互一直是绕不开的话题。传统方式中,我们往往需要手动创建和显示各种对话框、消息框或等待窗体,这不仅导致代码重复,还难以维护统一的UI风格。Stylet框架提供的IWindowManager接口正是为了解决这一痛点而生。
我曾在多个企业级WPF项目中亲历过这种困扰:一个中等规模的应用可能包含上百处需要显示提示或等待界面的场景。最初我们采用直接实例化窗体的方式,结果发现当需要调整所有对话框的样式时,不得不逐个修改每个调用点。而引入IWindowManager后,这类问题迎刃而解。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Stylet框架与IWindowManager解析
2.1 Stylet框架概述
Stylet是一个轻量级的MVVM框架,它通过约定优于配置的原则简化了WPF开发。与Prism等框架相比,Stylet最显著的特点是极简的API设计和强大的视图模型(ViewModel)导航系统。其核心优势包括:
- 自动化的ViewModel-first导航
- 内置的IoC容器
- 简洁的命令绑定
- 本文重点讨论的窗口管理能力
2.2 IWindowManager接口设计
IWindowManager是Stylet的核心服务之一,它抽象了窗口操作的基本行为。主要方法包括:
csharp复制public interface IWindowManager {
bool? ShowDialog(object viewModel);
void ShowWindow(object viewModel);
MessageBoxResult ShowMessageBox(string messageBoxText, string caption = null, MessageBoxButton buttons = MessageBoxButton.OK, MessageBoxImage icon = MessageBoxImage.None);
IWindowManager CreateWindowManager();
}
接口设计的精妙之处在于:
- 完全基于ViewModel操作,符合MVVM模式
- 统一了模态/非模态窗口的调用方式
- 内置了标准化的消息框实现
- 支持窗口管理器的实例隔离
3. 实战应用:等待窗体的实现
3.1 创建等待窗体ViewModel
首先定义等待窗体的视图模型:
csharp复制public class LoadingViewModel : Screen {
private string _message;
public string Message {
get => _message;
set => SetAndNotify(ref _message, value);
}
public LoadingViewModel(string initialMessage = "处理中,请稍候...") {
Message = initialMessage;
}
