无法将 xml 数据获取到 wpf 应用程序的组合框中

Cannot get xml data into comboBox for wpf application

我是一个新手程序员,想了解更多,但一直卡在这个问题上。我从未在我的 UI 中引用外部文件来获取数据。我无法更新我的组合框数据以包含 projects>project 的编号。不太确定从这里去哪里。

C# 在 MainWindow.xaml 编辑器中双击组合框:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {

    }

    private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        XDocument doc = XDocument.Load(@"C: \Users\kaleh\source\repos\Atlas\output.xml");
        var numbers = from n in doc.Root.Elements("project").Elements("number") select n.Value;
        this.comboBox1.ItemsSource = numbers;

    }
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        comboBox1_SelectionChanged(this.comboBox1, null);
    }
}

XML:我试图只将项目编号导入组合框,我尝试在 XAML 中绑定但无法正常工作。我比较熟悉C#,所以我想保留在C#中。

<?xml version="1.0" encoding="UTF-8"?>
<company>
    <projects>
        <project>
            <number>2021-005-00</number>
            <team>
                <member department="mech">Harper, K</member>
                <member department="pm">Logan, C</member>
            </team>
        </project>
        <project>
            <number>2021-004-00</number>
            <team>
                <member department="mech">Gagliardi, G</member>
                <member department="arch">Terranova, N</member>
            </team>
        </project>
    </projects>
</company>

我的组合框仍然是空白的,我不知道从这里去哪里。

这里有两件事。

一个:

不要在事件 selectionchanged 中加载组合框。 select 应该有一些数据来触发 selectionchanged。 将它移动到 window 构造函数或一些更好的地方,但是在你的控件初始化之后(在调用 InitializeComponent 之后)。示例如下。

public MainWindow()
{
    InitializeComponent();

    XDocument doc = XDocument.Load(@"C:\Users\XXXXXXX\Desktop\data\sample.xml");
    var numbers = from n in doc.Descendants("project").Elements("number") select n.Value;
    this.comboBox1.ItemsSource = numbers;
}

第二个:

更改 LINQ 查询。 无需查看根元素,只需检查 Descendants

var numbers = from n in doc.Descendants("project").Elements("number") select n.Value;