我在 XAML 和 WPF 中的数据绑定方面遇到了一些问题。具体来说,我正在尝试将数据从 XmlDataProvider 绑定到 ListBox。
问题是,当我在Visual Studio 2010中处于设计模式时,xml项正确显示,但是当我运行应用程序时,列表框只是空的。
这是我的 xaml 的样子。我没有使用任何隐藏的代码,所以这就是全部内容:
<Window x:Class="WpfTest9_Binding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="309" Width="622">
<Window.DataContext>
<XmlDataProvider XPath="Servers">
<x:XData>
<Servers>
<Server name="Server01" active="true" />
<Server name="Server02" active="false" />
<Server name="Testserver01" active="true" />
<Server name="Testserver02" active="true" />
</Servers>
</x:XData>
</XmlDataProvider>
</Window.DataContext>
<Grid>
<ListBox ItemsSource="{Binding XPath=*}" Margin="12">
<ListBox.ItemTemplate>
<DataTemplate>
<Border CornerRadius="5" Margin="5" BorderThickness="2" BorderBrush="#FFC14343">
<StackPanel Orientation="Horizontal" Margin="5">
<CheckBox IsChecked="{Binding XPath=@active}" />
<Label Content="{Binding XPath=@name}" />
</StackPanel>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>
就像我上面说的,奇怪的是它看起来在设计模式下工作,但在我运行应用程序时它无法填充列表框。我也没有收到任何错误消息或警告。
怎么了?
好的,解决方案非常简单。正如这篇文章所指出的,使用 XmlDataProvider 时,列表框内容没有填充来自 xml 的内容,我所要做的就是向 xml 元素添加一个空的命名空间属性。喜欢这个:
<Servers xmlns="">
<Server name="Server01" active="true" />
<!-- ... -->
</Servers>