Как отладить привязку XDocument к WPF ListView - PullRequest
0 голосов
/ 24 мая 2011

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

1 Ответ

1 голос
/ 24 мая 2011

Я внес эти изменения, чтобы заполнить представление ...

XAML: установить свойство itemssource файла ListView

<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;

...