Динамически генерируемый XAML - PullRequest
1 голос
/ 04 февраля 2011

Я работаю над созданием небольшого приложения, которое анализирует XML из URL и заполняет панель Grid на основе содержимого XML. В настоящее время у меня есть много других элементов, работающих должным образом, но все еще не хватает знаний, необходимых для скрытия или отображения определенных столбцов в таблице и правильного изменения размера. Вот базовая структура моего XAML.

В настоящее время я чувствую, что мое решение очень плохое. Я жестко закодировал каждый столбец и строку в Grid и связал их видимость с кодом, лежащим в основе Converter. При определенных условиях этот конвертер возвращает видимость скрытого, но при других условиях возвращает значение, отображаемое в таблице. Мне это кажется очень неаккуратным, поэтому я полагаю, что разработал эту систему неправильно.

Мой вопрос больше касается правильной настройки системы такого типа. Я гораздо лучше знаком с созданием самой структуры документа в рамках некоторой бизнес-логики, а затем смена токена в этой созданной структуре токеном внутри самого исходного документа. Каков наилучший способ достичь цели, которую я преследую?

1 Ответ

0 голосов
/ 04 февраля 2011

Вы можете предоставить XDocument или XElement, извлеченные из веб-службы, как DataContext для ItemsControl с Grid. Затем вы будете использовать DataTemplate для отображения информации.

XML:

<Entities>
    <Person Name="Ted" Age="42" />
    <Person Name="Sam" Age="19" />
    <Person Name="Bob" Age="25" />
    <Person Name="Angie" Age="38" />
</Entities>

Код сзади:

this.DataContext = xdoc;

XAML:

<ItemsControl ItemsSource="{Binding Root.Elements[Person]}"
              Grid.IsSharedSizeGroup="True">
    <ItemsControl.Resources>
        <DataTemplate DataType="Person">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition SharedSizeGroup="NameColumn"/>
                    <ColumnDefinition SharedSizeGroup="AgeColumn" />
                </Grid.ColumnDefinitions>
                <TextBox Text="{Binding Path=Attribute[Name].Value}" />
                <TextBox Text="{Binding Path=Attribute[Age].Value}"
                         Grid.Column="1"/>
            </Grid>
        </DataTemplate>
    </ItemsControl.Resources>
</ItemsControl>

Linq к ресурсам XML:

...