gpt4 book ai didi

c# - 当用户控件首次显示在 WPF 中时如何运行一些代码

转载 作者:行者123 更新时间:2023-11-30 22:15:25 25 4
gpt4 key购买 nike

我的主窗口有一个包含许多选项卡的选项卡控件。每个选项卡都有一个用户控件。在每个用户控件中,有一个或多个数据网格显示来自数据库的某些数据。我不想在我的程序启动时加载所有网格的数据。我只想在首次显示用户控件时执行读取数据库数据的方法。有没有事件可以做到这一点?我试过 Loaded 事件。但它是在我的应用程序启动时触发的,而不是在我单击标签页并显示用户控件时触发的。

最佳答案

还有一个事件可以附加到 TabControl 而不是实际的选项卡。使用 SelectionChanged 事件,您可以访问已删除(隐藏)的选项卡和显示(事件)的选项卡。

然后您需要在您的类中添加一个标志以检查该选项卡是否已显示。这样的事情应该有效。

        readonly List<string> shownTabs;

public MainWindow()
{
InitializeComponent();
this.shownTabs = new List<string>();
this.tabCtrl.SelectionChanged += tabCtrl_SelectionChanged;
}

void tabCtrl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if(e.AddedItems.Count == 0)
return;
var tabItem = e.AddedItems[0] as TabItem;
if (tabItem == null)
return;
if(this.shownTabs.Contains(tabItem.Name))
return;
this.shownTabs.Add(tabItem.Name);

if (tabItem == this.tab1)
{
//TODO : tab 1 logic
}
else if (tabItem == this.tab2)
{
//TODO : tab 2 logic
}
}

请注意,我使用了一个列表来保存对加载的选项卡的引用。同样在这种情况下,tabCtrl 事件将在构建 tabControl 时触发,因为第一个选项卡被添加到选择中。因此,您可能会发现在 Constructor 中添加事件处理程序是一个不好的地方,可能需要在另一个事件中。 IE 加载事件。

希望这对您有所帮助。

关于c# - 当用户控件首次显示在 WPF 中时如何运行一些代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17959655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com