如何调试将XDocument绑定到WPF ListView

本文关键字:绑定 XDocument WPF ListView 何调试 调试 | 更新日期: 2023-09-27 17:57:43

我想我在WPF数据绑定中缺少了一些基本的东西:

我有这个XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<WindowList>
  <Window Height="10" Width="10" ALL_MODEL_MODEL="xyz0" ALL_MODEL_MANUFACTURER="leidi"/>
  <Window Height="20" Width="20" ALL_MODEL_MODEL="xyz1" ALL_MODEL_MANUFACTURER="goffin"/>
  <Window Height="30" Width="30" ALL_MODEL_MODEL="xyz2" ALL_MODEL_MANUFACTURER="schlueter"/>
  <Window Height="40" Width="40" ALL_MODEL_MODEL="xyz3" ALL_MODEL_MANUFACTURER="rossi"/>
</WindowList>

这个XAML文件:

<Window x:Class="BindListToXDocument.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <ListView Name="lstWindows">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Height" 
                     DisplayMemberBinding="{Binding Path=Attribute[Height].Value}"/>
                    <GridViewColumn Header="Width" 
                     DisplayMemberBinding="{Binding Path=Attribute[Width].Value}"/>
                    <GridViewColumn Header="Model" 
                     DisplayMemberBinding="{Binding Path=Attribute[Model].Value}"/>
                    <GridViewColumn Header="Manufacturer" 
                     DisplayMemberBinding="{Binding Path=Attribute[Manufacturer].Value}"/>
                </GridView>
            </ListView.View>
        </ListView>
        <Button Click="Button_Click">Populate List</Button>
    </StackPanel>
</Window>

绑定表达式以msdn:How to:Bind to XDocument、XElement或LINQ for XML Query Results上的此文档为模型。

然后,我使用以下代码设置DataContext:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var doc = XDocument.Load("WindowList.xml");
    var windows = doc.Root.Elements();
    lstWindows.DataContext = windows;
}

当我点击按钮时,代码运行时没有任何抱怨,但列表项永远不会出现。我不知道如何调试这个。您有任何用于调试绑定表达式的指针吗?或者如何专门绑定XDocument

编辑:好吧,我的XAML:中似乎缺少一些关键内容

<ListView Name="lstWindows" ItemsSource="{Binding}"> <!-- specify the ItemsSource! -->

我将把这个问题留在这里,因为这是一个绑定到XDocument的最小示例,我很难找到它——大多数示例已经更进一步了。不过,我仍然对调试技巧感兴趣。

如何调试将XDocument绑定到WPF ListView

我做了这些更改来填充视图。。。

XAML:设置ListView 的itemsource属性

<ListView Name="lstWindows" Height="400" ItemsSource="{Binding Path=Elements}">

.CS文件:创建一个返回IEnumerable 的属性

public IEnumerable<XElement> Elements
{
    get
        {
            var doc = XDocument.Load(@"'abc.xml");
            var windows = doc.Root.Elements();
            return windows;
        }
}

在窗口的加载方法中。。。或者你也可以在按钮点击事件中这样做

this.DataContext = this;lstWindows.DataContext = this;