WPF 构造函数InitializeComponent()和Loaded()

WPF应用中,Xaml控件的初始化在InitializeComponent方法内完成,随后触发Loaded事件。Loaded事件通常在Initialized之后触发,适用于需要完整属性和布局信息的场景。Initialized适合仅重置属性而不需要布局更新的情况。要注意,滥用Loaded可能导致不必要的布局处理。当系统主题变更时,控件可能会同时触发Loaded和Unloaded事件。在TabControl中,切换TabItem会再次调用UserControl的Loaded方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在Xaml中的控件初始化,发生在InitializeComponent中,所有控件都加载完毕后,会调用Loaded().

不要滥用Loaded()!


Loaded 通常是元素初始化序列中最后引发的事件, 它总是在 Initialized 之后引发。选择处理 Loaded 还是 Initialized 取决于您的需求。</

### WPF 视图视图模型的初始化顺序 在 WPF 应用程序中,视图(View)视图模型(ViewModel)的初始化顺序是一个重要的概念,尤其是在使用 MVVM(Model-View-ViewModel)架构时。以下是关于两者初始化顺序的详细分析: #### 1. **视图的初始化过程** WPF 窗体的初始化过程遵循特定的生命周期事件顺序。视图的初始化主要发生在以下阶段: - **`InitializeComponent` 方法调用**:当视图类实例化时,`InitializeComponent` 方法会被调用以加载 XAML 并创建控件树[^4]。 - **`OnInitialized` 方法调用**:在所有 XAML 控件实例化完成后,`OnInitialized` 方法被调用[^4]。 - **`Loaded` 事件触发**:当窗口及其子元素进入可视化树时,`Loaded` 事件被触发[^4]。 #### 2. **视图模型的绑定时机** 视图模型通常通过 `DataContext` 属性与视图绑定。视图模型的初始化时机取决于绑定的方式位置: - 如果在 XAML 中直接设置 `DataContext`,例如 `<Window.DataContext>`,则视图模型会在 `InitializeComponent` 方法执行期间被实例化[^4]。 - 如果在代码隐藏中设置 `DataContext`,例如在 `OnInitialized` 或 `Loaded` 事件中,则视图模型的初始化会延迟到这些方法或事件被调用时[^1]。 #### 3. **结合 Prism 框架的初始化顺序** 在使用 Prism 框架时,视图视图模型的初始化顺序如下: - **依赖注入**:Prism 使用依赖注入容器来注册解析视图模型。视图模型通常在视图的构造函数或 `OnInitialized` 方法中通过容器解析并绑定到视图的 `DataContext`。 - **`Initialize` 方法调用**:Prism 提供了 `IInitialize` 接口,允许视图模型在绑定后立即执行初始化逻辑。如果视图模型实现了该接口,则其 `Initialize` 方法会在视图的 `OnInitialized` 方法之后调用。 ```csharp public class MainWindowViewModel : BindableBase, IInitialize { public void Initialize() { // 在这里执行视图模型的初始化逻辑 } } ``` #### 4. **完整的初始化顺序示例** 以下是一个典型的初始化顺序示例,展示了视图视图模型之间的交互: ```csharp public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); // 加载 XAML 并创建控件树 } protected override void OnInitialized(EventArgs e) { base.OnInitialized(e); DataContext = new MainWindowViewModel(); // 绑定视图模型 } } public class MainWindowViewModel : BindableBase, IInitialize { public void Initialize() { // 初始化逻辑 } } ``` 在这个例子中,视图模型的实例化发生在 `OnInitialized` 方法中,而其 `Initialize` 方法会在绑定后由 Prism 自动调用。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值