【问题标题】:Should access to controls be limited to the MainWindow class in WPF?对控件的访问是否应该仅限于 WPF 中的 MainWindow 类?
【发布时间】:2013-07-25 12:55:19
【问题描述】:

在其他编程语言(即Java)中,我之前在一个类中创建了一个窗口,然后让不同的类返回选项卡以添加到窗口中,这样当窗口的某些部分需要更新时,对象没有必须传递给一个主类来更新控件。

但是,我是 .NET 的新手,我发现如果我创建 MainWindow.xaml,则控件仅在其类中可用。这是设计使然,还是有办法访问另一个类中的控件?

设计函数是否更好,以便它们返回更新控件所需的信息,或访问已存在所需信息的类中的控件?

【问题讨论】:

    标签: .net wpf wpf-controls


    【解决方案1】:

    WPF 旨在使用绑定。您为表单提供一组数据(例如客户列表)并将控件(例如应该包含客户列表的组合框)绑定到它。

    数据本身由表单中的函数操作,或者最好由控制器(包含独立逻辑的类)操作。

    在 WPF 中查找有关绑定的信息,以及常见的 UI 模式(如 MVVM 或 MVC),您将很快了解情况。

    【讨论】:

    • +1 感谢您的回答。我在 MVVM 上找到了一个相当不错的视频,我想我现在理解得更好了。现在,我创建了一个“ViewModel”类,其中包含所有要绑定的数据(即ObservableCollections),它与其他类通信以获取数据。这是正确的吗?
    【解决方案2】:

    实际上,您不应该将代码放在代码隐藏中是一种不好的做法。

    事实上,最流行的 WPF 编程方式是使用 MVVM pattern,这是 MVC 的一种变体。

    在 MVVM 模式中,视图仅包含 XAML 或非常有限的代码来执行使用 WPF 的触发器和动画无法轻松完成的 UI 操作。

    View 的数据由 ViewModel 类通过数据绑定提供。数据绑定由框架本身提供,并在 View 或 ViewModel 不知道对方的情况下来回传递数据。

    每当 ViewModel 通过标准接口 (INotifyPropertyChanged) 通知 ViewModel 时,框架都会将 ViewModel 属性的更改传递给 View。

    与其他 MVC 模式的主要区别在于 ViewModel 是底层业务或数据模型之上的抽象,专门为使视图的工作更容易而形成。

    没有标准的 MVVM 实现。最流行的两个框架是MVVM LightCaliburn.Micro(我的偏好)。 MVVM Light 更轻量级,而 Caliburn.Micro 更自以为是但更强大。

    附带说明一下,MVVM 背后的想法已经在 Backbone.js 和 Knockout.js 等一些 Javascript 框架中找到了自己的方式

    【讨论】:

    • 感谢您对模型的回答和参考。需要一个框架还是仅仅有帮助?
    猜你喜欢
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多