WPF 如何让控件Loaded事件处理方法只执行一次
有时我们会在控件的Loaded事件中执行数据初始化操作;但Loaded事件可能不只会触发一次(比如:控件放在TabControl中,切换TabItem便可发现Loaded事件会多次触发)
故如果我们在Loaded事件中处理初始化操作,且只希望Loaded事件处理方法只执行一次,该如何做?
采用标志位
使用标志位如,bool isDataInitialized;在进入Loaded事件处理方法时,判断标志位,如果为true,则退出不再处理;否则,处理完Loaded事件后,将标志位置为true。
private bool isDataInitialized = false;
private void MyControl_Loaded(object sender, RoutedEventArgs e)
{
if (isDataInitialized)
{
return;
}
// 执行数据初始化操作
InitializeData();
// 标记数据已初始化
isDataInitialized = true;
}
private void InitializeData()
{
// 数据初始化逻辑
}
取消Loaded事件订阅
在Loaded 事件处理方法中取消对 Loaded 事件的订阅。这样,一旦初始化完成,Loaded 事件就不会再触发该处理方法。
public MyControl()
{
InitializeComponent();
this.Loaded += MyControl_Loaded;
}
private void MyControl_Loaded(object sender, RoutedEventArgs e)
{
// 执行数据初始化操作
InitializeData();
// 取消对 Loaded 事件的订阅
this.Loaded -= MyControl_Loaded;
}
private void InitializeData()
{
// 数据初始化逻辑
// 例如,加载数据并绑定到控件
}
以上两种解决方法,帮助我们避免Loaded事件多次触发的问题。

浙公网安备 33010602011771号