2014-04-03 147 views
0

我想一個列表框項目的數據綁定一個新的窗口WPF數據綁定到窗口

「名稱」按鈕鏈接應該打開一個新的窗口,列表框項目的數據綁定。

綁定是一個.XML文件:

<People> 
    <Person image="Test.jpg" company="" position="" website="" chat="" notes=""> 
     <Name first_name="Max" second_name="" last_name="Mustermann" salutation="" /> 
     <Email email1="" email2="" email3="" /> 
     <Phone_Numbers business="" private="" mobile="" /> 
     <Business_Adress street="" place="" state="" postalcode="" country="" /> 
     <Private_Adress street="" place="" state="" postalcode="" country="" /> 
    </Person> 
</People> 

而且新的窗口應該與人的名稱元素。

雖然會有更多的一個人,但窗口應鏈接到正確的人。

這是XmlDataProvider:

<XmlDataProvider x:Name="XmlData" Source="People.xml" XPath="/People/Person" /> 

而且列表框的結合看起來是這樣的:

<ListBox 
    Grid.Row="0" 
    IsSynchronizedWithCurrentItem="True" 
    ItemsSource="{Binding UpdateSourceTrigger=Explicit}" 
    x:Name="PeopleListBox" 
    SelectionMode="Single"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
     <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
     </Style> 
    </ListBox.ItemContainerStyle> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <TextBlock> 
      <TextBlock.Text> 
       <MultiBinding StringFormat="{}{0}, {1} {2}"> 
        <Binding XPath="Name/@last_name" /> 
        <Binding XPath="Name/@first_name" /> 
        <Binding XPath="Name/@second_name" /> 
       </MultiBinding> 
      </TextBlock.Text> 
     </TextBlock> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

你的問題是手動設置XmlDataProvider.Source手動加載它? – dkozl

+0

我該怎麼做,因爲它只打開第一個人 –

+0

請顯示一些代碼。 – Steve

回答

0

除非DataContext設置爲XmlDataItemsSource結合將無法正常工作。你沒有提到你定義的地方XmlDataProvider,因爲如果在Resources那麼你需要指定x:Key而不是x:Name,然後你必須指定它爲Binding.Source。你也沒有說什麼People.xml,因爲它必須被添加到您的解決方案作爲一種資源

<Window ...> 
    <Window.Resources> 
     <XmlDataProvider x:Key="XmlData" XPath="/People/Person" Source="People.xml"/> 
    </Window.Resources> 
    <ListBox ItemsSource="{Binding Source={StaticResource XmlData}}"> 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="ListBoxItem"> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
      </Style> 
     </ListBox.ItemContainerStyle> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock> 
        <TextBlock.Text> 
         <MultiBinding StringFormat="{}{0}, {1} {2}"> 
          <Binding XPath="Name/@last_name" /> 
          <Binding XPath="Name/@first_name" /> 
          <Binding XPath="Name/@second_name" /> 
         </MultiBinding> 
        </TextBlock.Text> 
       </TextBlock> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Window> 

,或者您可以通過在代碼