如何调试将XDocument绑定到WPF ListView

问题描述

|| 我认为我在这里缺少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上建模的:如何:绑定到XDocument,XElement或LINQ以获取XML查询结果。 然后,我使用以下代码设置
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
的最小示例,这使我很难找到一些东西-大多数示例已经更进一步了。不过,我仍然对调试技巧感兴趣。     

解决方法

我做了这些更改以填充视图... XAML:设置ListView的itemssource属性
<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;