Я хочу использовать привязку данных к XML-документу, чтобы заполнить простую форму, содержащую сведения о списке людей. У меня есть все это настроить и работать, как это прямо сейчас:Связывание данных XML с пространствами имен
<Window x:Class="DataBindingSample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<Window.Resources>
<XmlDataProvider x:Key="xmlProvider" XPath="People" Source="c:\someuri.xml"/>
</Window.Resources>
<Grid>
<ListBox Name="personList" ItemsSource="{Binding Source={StaticResource xmlProvider}, XPath=Person}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding XPath=Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<GroupBox Header="GroupBox" Name="groupBox1" DataContext="{Binding ElementName=personList, Path=SelectedItem}">
<Grid>
<TextBox Name="nameText" Text="{Binding XPath=Name}"/>
<ComboBox Name="genderCombo" Text="{Binding XPath=Gender}">
<ComboBoxItem>Male</ComboBoxItem>
<ComboBoxItem>Female</ComboBoxItem>
</ComboBox>
</Grid>
</GroupBox>
</Grid>
</Window>
(элементы Все позиции/макета были удалены для ясности)
Теперь это прекрасно работает! Если я предоставил ему некоторый XML, который соответствует указанным путям, я получаю список имен в списке, который показывает имя и пол в соответствующих полях при нажатии. Проблема возникает, когда я начинаю пытаться использовать пространства имен в моем источнике XML. Тогдашние изменения XAML, чтобы выглядеть следующим образом:
<Window x:Class="DataBindingSample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<Window.Resources>
<XmlNamespaceMappingCollection x:Key="namespaceMappings">
<XmlNamespaceMapping Uri="http://www.mynamespace.com" Prefix="mns"/>
</XmlNamespaceMappingCollection>
<XmlDataProvider x:Key="xmlProvider" XmlNamespaceManager="{StaticResource namespaceMappings}" XPath="mns:People" Source="c:\someuriwithnamespaces.xml"/>
</Window.Resources>
<Grid>
<ListBox Name="personList" ItemsSource="{Binding Source={StaticResource xmlProvider}, XPath=mns:Person}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding XPath=mns:Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<GroupBox Header="GroupBox" Name="groupBox1" DataContext="{Binding ElementName=personList, Path=SelectedItem}">
<Grid>
<TextBox Name="nameText" Text="{Binding XPath=mns:Name}"/>
<ComboBox Name="genderCombo" Text="{Binding XPath=mns:Gender}">
<ComboBoxItem>Male</ComboBoxItem>
<ComboBoxItem>Female</ComboBoxItem>
</ComboBox>
</Grid>
</GroupBox>
</Grid>
</Window>
С помощью этого кода (и соответственно пространства имен XML, конечно) в окне списка еще не отображает имена должным образом, но при нажатии на эти имена больше не обновляет имя и пол поля ! Мое подозрение заключается в том, что каким-то образом пространство имен xml отрицательно реагирует на DataContext groupbox, но я не уверен, почему и как. Кто-нибудь знает, как использовать пространства имен XML в этом контексте?
Хорошо, это работает, но я хотел бы узнать немного больше о том, почему, прежде чем дать «ответную» печать. Я новичок в привязке данных, поэтому я не знаком с некоторыми более продвинутыми синтаксисами. Что такое local-name() здесь? – Toji 2008-10-10 15:18:54