C# 初始化两次Usercontrol会导致开销

C# 初始化两次Usercontrol会导致开销,c#,wpf,winforms,xaml,mvvm,C#,Wpf,Winforms,Xaml,Mvvm,我正在开发一个WPF/C#应用程序,它通过将所有用户控件添加到网格的子控件,然后通过具有图标并充当菜单的listView来控制用户控件的可见性,从而在不同的用户控件之间导航 (如果您感到困惑,请查看下面的代码) 我一直关注的是,当我将用户控件添加到网格中时,以及当我单击与特定用户控件关联的ListViewitem来观察它时,用户控件被初始化,但如果我更改了选择并返回到原始用户控件,则不再初始化,现在只更改了可见性,因此,它们初始化了大约2次,bcz导致我的应用程序运行缓慢 代码如下所示 将用户控

我正在开发一个WPF/C#应用程序,它通过将所有用户控件添加到网格的子控件,然后通过具有图标并充当菜单的listView来控制用户控件的可见性,从而在不同的用户控件之间导航

(如果您感到困惑,请查看下面的代码)

我一直关注的是,当我将用户控件添加到网格中时,以及当我单击与特定用户控件关联的ListViewitem来观察它时,用户控件被初始化,但如果我更改了选择并返回到原始用户控件,则不再初始化,现在只更改了可见性,因此,它们初始化了大约2次,bcz导致我的应用程序运行缓慢

代码如下所示 将用户控件添加到网格(网格名称为RenderPages,添加的用户控件为Dashboard,CheckBoxSelection)

private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        UserControl usc;

        usc = new Dashboard();
        usc.Tag = "Memeber";
        RenderPages.Children.Add(usc);

        CheckBoxSelection usc3 = new CheckBoxSelection();
        usc3.Tag = "CheckBoxList";
        RenderPages.Children.Add(usc3);

        ShowUserContro("Memeber");
    }

当从ListView中选择一个项目时,它会将名称发送到下面的方法

private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        UserControl usc;

        usc = new Dashboard();
        usc.Tag = "Memeber";
        RenderPages.Children.Add(usc);

        CheckBoxSelection usc3 = new CheckBoxSelection();
        usc3.Tag = "CheckBoxList";
        RenderPages.Children.Add(usc3);

        ShowUserContro("Memeber");
    }
    private void ListViewMenu_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ShowUserContro((((ListViewItem)((ListView)sender).SelectedItem).Name));           
    }

控制添加的用户控件的可见性

private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        UserControl usc;

        usc = new Dashboard();
        usc.Tag = "Memeber";
        RenderPages.Children.Add(usc);

        CheckBoxSelection usc3 = new CheckBoxSelection();
        usc3.Tag = "CheckBoxList";
        RenderPages.Children.Add(usc3);

        ShowUserContro("Memeber");
    }
private void ShowUserContro(string nm)
    {
        foreach (UIElement item in RenderPages.Children)
        {
            if (item is UserControl) 
            {
                UserControl x = (UserControl)item;
                if (x.Tag != null) 
                {
                    if (x.Tag.ToString().ToUpper() == nm.ToUpper())
                    {
                        x.Visibility = Visibility.Visible;
                    }
                    else 
                    {
                        x.Visibility = Visibility.Collapsed;
                    }
                }
            }
        }
    }