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

标签 c# wpf user-controls

我的主窗口有一个带有许多选项卡的选项卡控件。每个选项卡都有一个用户控件。在每个用户控件中,都有一个或多个数据网格显示来自数据库的某些数据。我不想在程序启动时加载所有网格数据。我只想在首次显示用户控件时执行读取数据库数据方法。有一个事件可以做到这一点吗?我尝试了 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
            }
        }

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

希望这有帮助。

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

相关文章:

c# - 使用 log4net Asp.net Core 2.2 将日志文件写入 AppData 不起作用

c# - ISO和奥林匹克国家代码之间的映射?

c# - 有没有办法删除日历控件中涂黑的日期以便再次选择它们?

WPF 绑定(bind)转换器

WPF 绑定(bind)到 UserControl 自定义 DependencyProperty

c# - 如何包含行号和文件名 Console.WriteLine 输出?

c# - Form.ShowDialog() 不显示启用调试的窗口

c# - “Long”延迟导致我的视​​图的按钮无法重新启用

c# - 继承自 ASP.NET Web 控件 : "Element <name> is not a known element"

C#:如何让用户控件正确地自动调整自身大小