2011-05-24 52 views
0

我觉得我失去了一些东西在WPF数据绑定的基本位置:如何调试一个XDocument绑定到一个WPF的ListView

我有这个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, or 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

编辑: OK,看来我错过了我的XAML关键的东西:

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

我会离开这里了这个问题,因为它是绑定到XDocument,我的东西小例子发现问题很困难 - 大多数例子已经更进一步。不过,我仍然对调试技巧感兴趣。

+1

使用'output window'查找可能的绑定错误 – 2011-05-24 10:27:17

+0

@Haris Hasan:好点。 '输出窗口'没有提到任何绑定错误,但... – 2011-05-24 10:40:23

回答

1

我做了这些改变填充查看...

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;

+0

谢谢。你认为'Path = Elements'在这里是否有必要?我认为这可能会过度... – 2011-05-24 10:56:29

+0

'Path ='不是必须的,你可以说'绑定元素',它会工作。 – 2011-05-24 11:02:51