如何解决如何调试将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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。