WPF связывает данные XML с элементами графического интерфейса - PullRequest
0 голосов
/ 30 августа 2010

Я новичок в WPF и пока не понимаю, как это сделать ...

У меня есть XML-файл, в котором хранятся данные конфигурации, и я хочу, чтобы данные были вЭтот XML-файл будет отображаться в интерфейсе графического интерфейса пользователя.

В настоящее время я использую XmlDataProvider, который считывает набор данных

Данные примерно такие:

<Items>
  <Item name="item01">
    <Position x="0", y="0"/>
  </Item>
  <Item name="item02">
    <Position x="0", y="0"/>
  </Item>
  <Item name="item03">
    <Position x="0", y="0"/>
  </Item>
</Items>

XmlDataProvider объявляется как ресурс следующим образом

<Window.Resources>
    <XmlDataProvider x:Key="SiteConfigFile"  XPath="SiteConfig" >
    </XmlDataProvider>
</Window.Resources>

Затем я включаю комбинированный список, чтобы показать каждый элемент в файле XML через раскрывающееся меню, используя:

<ComboBox Name="ButtonMapping" ItemsSource="{Binding Source={StaticResource SiteConfigFile}, XPath=Items/Item}" DisplayMemberPath="@name" SelectedIndex="0">

Все это прекрасно работает.

Проблема, которую я хочу решить сейчас, заключается в том, что ... в зависимости от того, какой элемент из поля со списком выбран, соответствующий элемент Position с его 2 атрибутами должен быть показан в atextbox на графическом интерфейсе.... нужно ли мне генерировать динамический XPath, который кажется немного грязным ... какой лучший способ сделать это, у меня нет идей: (* ​​1018 *

1 Ответ

1 голос
/ 30 августа 2010

Как насчет упаковки TextBox в пару панелей? Смотрите пример ниже. Я использовал внешнюю панель (Border), чей DataContext связан со свойством ComboBox.SelectedItem. Затем другая внутренняя панель (StackPanel) привязывается к элементу в XML. Наконец, внутри этой внутренней панели я поместил элемент управления TextBox, текст которого связан с @x и @ y.

<Border DataContext="{Binding ElementName=ButtonMapping, Path=SelectedItem}">
    <StackPanel DataContext="{Binding XPath=Position}">
        <TextBlock Text="x:"/>
        <TextBox Text="{Binding XPath=@x}"/>
        <TextBlock Text="y:"/>
        <TextBox Text="{Binding XPath=@y}"/>
    </StackPanel>
</Border>

Обратите внимание, что я использовал два TextBox для отображения атрибутов x и y. Если вы хотите использовать только один, вам придется использовать IValueConverter, чтобы правильно «отформатировать» строку, которую вы хотите показать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...