Я думаю, что я упускаю что-то фундаментальное в привязке данных 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
, что мне было трудно найти - большинство примеров уже пошли дальше. Мне все еще интересны советы по отладке.