在WPF XPath表达式中过滤

时间:2013-04-02 12:24:53

标签: wpf xml data-binding xpath .net-4.5

我有ComboBox,其中列出了下面显示的联系方式。 ComboBox显示正确的值,因此ItemSource绑定正在运行。

我想要存档的是在应用程序启动时显示所选的联系方式。我试图将选定的值绑定到ComboBox.Text属性,但我无法弄清楚如何设置过滤器。

这是我的输入数据:

<Contact ShowsInterest="true">
  <Name>Tester</Name>
  <Lastname>Test</Lastname>
  <ContactMethods>
    <ContactMethod Selected="False">Phone</ContactMethod>
    <ContactMethod Selected="False">Email</ContactMethod>
    <ContactMethod Selected="True">Letter</ContactMethod>
    <ContactMethod Selected="False">Mobile</ContactMethod>
  </ContactMethods>
</Contact>

这是我的ComboBox

<ComboBox Name="combobox1" 
          ItemsSource="{Binding XPath=Contact/ContactMethods//*}" 
          Width="100" Height="25">
    <ComboBox.Text>
        <Binding XPath="Contact/ContactMethods//*[@Selected='true']"/>
    </ComboBox.Text>
</ComboBox>

XPath Expression应该执行以下操作:在Contact / ContactMethods /下显示Element,其中selected为true。

修改 即使直接设置文本属性也不起作用。

<ComboBox Name="combobox1" 
          ItemsSource="{Binding XPath=Contact/ContactMethods//*}" 
          Width="100" Height="25">
    <ComboBox.Text>
        Phone
    </ComboBox.Text>
</ComboBox>

我想我必须使用SelectedValue属性:

<ComboBox Name="combobox1" 
          ItemsSource="{Binding XPath=Contact/ContactMethods//*}" 
          Width="100" Height="25">
    <ComboBox.SelectedValue>
        Phone
    </ComboBox.SelectedValue>
</ComboBox>

EDIT2: 感谢MikroDel

,这是一个可行的解决方案
<ComboBox Name="combobox1" 
            ItemsSource="{Binding XPath=Contact/ContactMethods//*}" 
            Width="100" Height="25">
    <ComboBox.SelectedValue>
        <Binding XPath="Contact/ContactMethods/ContactMethod[@Selected='True']"/>
    </ComboBox.SelectedValue>
</ComboBox>

1 个答案:

答案 0 :(得分:2)

这是正确的:

   <Binding XPath="Contact/ContactMethods/ContactMethod[@Selected='True']"/>