我是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,这看起来有点混乱......最好的方法是做什么,我没有想法:(
答案 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来正确“格式化”你想要显示的字符串。