如何将 App.config 中定义的 ListItems 初始化或绑定到 VB.Net wpf ComboBox

How to initialise or bind ListItems that are defined in App.config into a VB.Net wpf ComboBox

我正在设计一个测试应用程序,它将以灵活的方式在多个站点中使用,以便用户可以定义使用目的。以前我使用 txt .ini 文件(使用 VB 6 或 Python)进行设置,但按照 VB.Net 哲学的建议,我尝试使用 XML App.config 文件作为初始化数据源。按照这种方法,我被引导使用 App.config 设置 table 的机器编码工具(通过首先在设置 table 的值字段中输入一个字符串,输入然后擦除它)。因此,我有一个机器编写的 VML 代码片段,附在下面:

<?xml version="1.0" encoding="utf-8" ?>

根据我用字符串列表填充组合框的意图,用户可以选择这些字符串来传播特定于选项的配置,我选择了:System.Collections.Specialized.StringCollection 作为变量类型此应用的设置 table。

我的困难是我找不到关于如何将字符串列表输入 App.config XML 文件的任何定义。此外,我看不到如何将这样的字符串列表绑定到 WPF ComboBox 中的 ListIndex。我可以在页面上找到控件之间绑定的示例,但是 none 来自 XML App.config 文件,我假设它是由应用程序启动事件处理的。

欢迎任何见解。

一个完全不同的方法怎么样。从单独的 Utility 中将您的列表另存为 XML。然后反序列化并绑定到ComboBox。

Class MainWindow
    Private lst As New List(Of String)
Private Sub btnFillCombo_Click(sender As Object, e As RoutedEventArgs) Handles btnFillCombo.Click
    '1. Create an instance of XML Serializer
    Dim xs As XmlSerializer = New XmlSerializer(GetType(List(Of String)))
    '2. Create a Stream for your file
    Using fs As Stream = New FileStream("MyList.xml", FileMode.Open, FileAccess.Read, FileShare.None)
        '3. Deserialize your Stream and cast to List(Of String)
        lst = CType(xs.Deserialize(fs), List(Of String))
    End Using
    cboList.ItemsSource = lst
End Sub


    Private Sub btnSaveList_Click(sender As Object, e As RoutedEventArgs) Handles btnSaveList.Click
        ' FileStream(FileName, Mode, Access, Share) intellisense overload #9 out of 15
        Using fs As Stream = New FileStream("MyList.xml", FileMode.Create, FileAccess.Write, FileShare.None)
            Dim xs As XmlSerializer = New XmlSerializer(GetType(List(Of String)))
            xs.Serialize(fs, lst)
        End Using
    End Sub

    Private Sub btnLoadList_Click(sender As Object, e As RoutedEventArgs) Handles btnLoadList.Click
        lst.Add("Mathew")
        lst.Add("Mark")
        lst.Add("Luke")
        lst.Add("John")
    End Sub
End Class

btnLoadList 和 btnSaveList 将在单独的实用程序中仅 运行 一次。