我是 VB.NET 和 WPF 的新手。
我正在构建一个“问卷调查”应用程序。将按顺序向用户呈现不同的问题/任务(窗口)。在他们对每个问题/任务做出回应并按下“提交”按钮后,将打开一个包含新问题/任务的新窗口,而之前的窗口将关闭。在每个问题之后,当按下按钮时,我需要将数据存储到某个全局对象。回答完所有问题后,该对象的数据应写入输出文件。
我发现 Dictionary 将是在每个窗口之后存储结果的最佳选择。
我不确定如何、在哪里创建这个全局字典以及如何访问它。我应该使用视图模型吗?如果是,你能举个例子吗?或者,它应该只是一个具有共享属性的简单类吗?(像这样)
编辑2:我尝试了许多在线推荐的不同方式
全球模块:
Module GlobalModule
Public Foo As String
End Module
全局变量:
Public Class GlobalVariables
Public Shared UserName As String = "Tim Johnson"
Public Shared UserAge As Integer = 39
End Class
全局属性:
Public Class Globals
Public Shared Property One As String
Get
Return TryCast(Application.Current.Properties("One"), String)
End Get
Set(ByVal value As String)
Application.Current.Properties("One") = value
End Set
End Property
Public Shared Property Two As Integer
Get
Return Convert.ToInt32(Application.Current.Properties("Two"))
End Get
Set(ByVal value As Integer)
Application.Current.Properties("Two") = value
End Set
End Property
End Class
这是我将数据保存到第一个窗口中的全局变量/属性的地方。在关闭旧窗口并打开新窗口之前,我需要在此子例程中存储数据。我使用 MessageBox 只是为了测试。
Private Sub btnEnter_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnEnter.Click
Dim instructionWindow As InstructionsWindow
instructionWindow = New InstructionsWindow()
Application.Current.Properties("number") = textBoxValue.Text
Globals.One = "2"
Globals.Two = 3
MessageBox.Show("GlobalVariables: UserName=" & GlobalVariables.UserName & " UserAge=" & GlobalVariables.UserAge)
GlobalVariables.UserName = "Viktor"
GlobalVariables.UserAge = 34
GlobalModule.Foo = "Test Foo"
'testing if it saved tha value
'MessageBox.Show(Application.Current.Properties("number"))
Application.Current.MainWindow.Close()
instructionWindow.ShowDialog()
End Sub
下一个子例程是我试图从第二个窗口中的全局属性/变量中检索值的地方,但消息框显示为空。还有可能是我以错误的方式分配值,或者没有以正确的方式读取它们(强制转换?):
Private Sub FlowDocReader_Initialized(ByVal sender As Object, ByVal e As System.EventArgs) Handles FlowDocReader.Initialized
' Get a reference to the Application base class instance.
Dim currentApplication As Application = Application.Current
MessageBox.Show(currentApplication.Properties("number"))
MessageBox.Show("One = " & Globals.One & " Two = " & Globals.Two)
MessageBox.Show("GlobalVariables: UserName=" & GlobalVariables.UserName & " UserAge=" & GlobalVariables.UserAge)
MessageBox.Show("GlobalModule.Foo = " & GlobalModule.Foo)
Dim filename As String = My.Computer.FileSystem.CurrentDirectory & "\instructions.txt"
Dim paragraph As Paragraph = New Paragraph()
paragraph.Inlines.Add(System.IO.File.ReadAllText(filename))
Dim document As FlowDocument = New FlowDocument(paragraph)
FlowDocReader.Document = document
End Sub
谢谢。