【发布时间】:2021-09-30 18:33:51
【问题描述】:
我正在用 VB.NET 编写一个应用程序,其中各种计算在 Core 类中执行。它们由 MainWindow 类 (UI) 中的用户输入调用。计算完成后,它们会再次显示在主窗口中。
为了避免意大利面条式的代码和不小心使 Core 依赖于 UI,我的理解是我应该使用接口。我想我了解接口的工作原理,但我不确定如何正确实现它以实现核心和 UI 之间的双向通信。
下面是一个非常简单的例子。
核心类:
Public Module Core
Public UI As UIinterface
Sub Init()
UI = New MainWindow
End Sub
Sub RunCalculations()
Dim calculationResult As String = 5 + 5
UI.DisplayResults(calculationResult)
End Sub
End Module
UIInterface接口:
Public Interface UIInterface
Sub DisplayResults(results as String)
End Interface
还有我的 MainWindow 类:
Class MainWindow
Implements UIInterface
Private Sub DisplayResults(results as String) Implements UIInterface.DisplayResults
label1.text = results
End Sub
Private Sub RunButton_Click(sender As Object, e As RoutedEventArgs)
Core.RunCalculations() 'This is probably wrong
End Sub
End Class
如您所见,我不明白如何将按钮点击传递给核心。据我了解,这应该以某种方式通过 UIInterface 完成,但我无法弄清楚,而且我似乎无法在任何地方找到任何相关示例。我在接口使用方面发现的只是单向通信。
有人可以建议吗?如果我对Interfaces 的理解有缺陷?如果是这样,将 Core 与 UI 尽可能分开的正确实现是什么,以便以后在不更改 Core 中的任何内容的情况下轻松切换到另一个 UI 实现?
编辑:我正在为我的 UI 使用 WPF。
【问题讨论】:
-
您的 UI 技术是什么(即 WPF、WinForms 或其他)?如何构建它的答案将取决于技术。
-
@Craig WPF。我编辑了我的帖子以包含其他人的此信息。
-
您可能需要一些代码隐藏来将
DataContext与视图相关联,但除此之外,您应该使用针对视图模型属性的绑定来处理所有事情。您的 ViewModel 将公开ICommand类型的属性,例如RunCommand,然后在您的视图中,按钮的 xaml 会将单击绑定到“RunCommand”属性。 WPF 将发挥连接一切的魔力,并且它会正常工作。只要确保 ViewModel 实现INotifyPropertyChanged并通知更改,界面就会响应更改。 -
重新“使用事件引发调用污染模型代码”,您将不得不让 UI 知道它显示的数据已更改。你还打算怎么做?
INotifyPropertyChanged不会强迫您在任何地方都这样做,您确实可以选择聚合成一个大“刷新”,并理解您的大“刷新”需要知道可能需要的所有内容的名称刷新(增加耦合)。请注意,<CallerMemberName>可以轻松编写一个可以不带参数调用的“Raise”例程。
标签: vb.net user-interface interface