Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用静态类使UI元素可以从.NET中的所有类访问,这是一种好的做法吗?_C#_.net_Wpf_User Interface_Static Classes - Fatal编程技术网

C# 使用静态类使UI元素可以从.NET中的所有类访问,这是一种好的做法吗?

C# 使用静态类使UI元素可以从.NET中的所有类访问,这是一种好的做法吗?,c#,.net,wpf,user-interface,static-classes,C#,.net,Wpf,User Interface,Static Classes,请让我知道以下哪项是良好的编程实践: 1。使用静态类,然后使用类MainWindow构造函数对其的引用,如图所示: public partial class Mainwindow : Window { public MainWindow() { InitializeComponent(); UI.window = this; } private void button1_Click(object sender, R

请让我知道以下哪项是良好的编程实践:

1。使用静态类,然后使用类MainWindow构造函数对其的引用,如图所示:

    public partial class Mainwindow : Window
    {
    public MainWindow()
    {
        InitializeComponent();
        UI.window = this;
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {   
        Shutdownads attempt1 = new Shutdownads();
    }
    }

    static class UI
    {
        public static MainWindow window; 
    }

    /*and then refering to the wpf elements from other classes as follows
       UI.window.textbox.Text="blahblah"
       UI.window.button ... and so on
    */

2。在主窗口类中包含程序中的所有类是否更好?


3。是否有更好的选项(也可以实现更好的OOP,也可以通过其他类访问UI)?

从多个类控制UI元素通常是不好的做法

您应该创建一个接口,该接口公开从其他类提取UI的方法和属性,并在
main窗口中实现该接口


其他类可以接受该接口作为构造函数参数,或者从静态类使用它。

好的做法是创建不耦合的代码。如果您使用这种方法,很可能会丢失提交更改的位置


对“远”事件作出反应的一种可能性是实现一种观察者模式。这样,您就可以真正在表示层上处理可视化(在本例中是主窗口)的更改了

我不太清楚winforms。但是你应该遵循mvc模式

通常你会得到你的mainclass(你的案例mainwindow),它是控制器。所以所有视图(子元素)都是从这个类控制的。子元素可能包含对主窗口的引用。 主课应该很流畅。 当然,模型也应该解耦。
静态类是不好的实践。不需要。

为什么需要使UI元素可访问?如果你正在用WPF做一些非平凡的事情,那么你应该真正使用MVVM,它将UI元素的细节抽象出来。嘿,谢谢。。。我来试试这个方法。界面将是完美的。