WPF将XML数据绑定到GUI项目

时间:2010-08-30 16:38:19

标签: c# wpf xaml

我是WPF的新手,还没有完全掌握应该如何做的事情......

我有一个存储配置数据的xml文件,我希望这个xml文件中的数据显示在gui前端。

我目前正在使用读取一组数据的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">

一切正常。

我现在要解决的问题是......根据选择组合框中的哪个项目,相应的具有2个属性的Position元素需要在gui上的文本框中显示...需要生成动态XPath,这看起来有点混乱......最好的方法是做什么,我没有想法:(

1 个答案:

答案 0 :(得分:1)

如何将TextBox包装在几个面板中?见下面的例子。我使用了一个外部面板(Border),其DataContext绑定到ComboBox.SelectedItem属性。然后,另一个内部面板(StackPanel)绑定到XML中的元素。最后在这个内部面板中,我放置了TextBox控件,其Text绑定到@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来正确“格式化”你想要显示的字符串。