2009-06-30 23 views
0

私はいくつかのWPFデータバインディングを実行しようとしていますが、私は少し時間がかかっています。私は2つのリストボックスとXMLファイルを持っています。最初のリストボックスは、XMLソースに正常にバインドされます。ただし、最初のリストボックスから2番目のリストボックスのソースとして選択したアイテムの子にバインドしようとすると、何も表示されません。目標は、索引やルックアップのようなものです(1つの索引を選択すると、関連する項目が検索されます)。私はデータバインディングのためにここに何かを見逃していますか? XAMLとXMLを以下に示します。WPF XMLデータバインド

XAML:

<Window x:Class="MyTool.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="600" Width="800"> 
    <Window.Resources> 
     <XmlDataProvider x:Key="AllDeployments" XPath="Deployments" Source="Deployments.xml" /> 
     <DataTemplate x:Key="dtDeployments"> 
      <StackPanel FlowDirection="LeftToRight" Orientation="Horizontal"> 
       <TextBlock Text="{Binding [email protected]}" /> 
       <TextBlock Text=" - "/> 
       <TextBlock Text="{Binding [email protected]}" /> 
      </StackPanel> 
     </DataTemplate> 
     <DataTemplate x:Key="dtFiles"> 
      <TextBlock Text="{Binding XPath=File}" /> 
     </DataTemplate> 
    </Window.Resources> 
    <Grid Name="gMain"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition Width="2"/> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <Menu Grid.Column="0" Grid.ColumnSpan="3"></Menu> 
     <ListBox Grid.Column="0" Name="lbDeployment" 
       ItemsSource="{Binding Source={StaticResource AllDeployments}, XPath=Deployment}" 
       ItemTemplate="{StaticResource dtDeployments}"></ListBox> 
     <GridSplitter Grid.Column="1"></GridSplitter> 
     <StackPanel Grid.Column="2"> 
      <ListBox Name="lbFiles" 
        ItemsSource="{Binding Mode=TwoWay, ElementName=lbDeployments, Path=SelectedItem.InnerText, UpdateSourceTrigger=PropertyChanged}" 
        ItemTemplate="{StaticResource dtFiles}" 
        Height="400"></ListBox> 
     </StackPanel> 
    </Grid> 
</Window> 

XML:彼らは黙って失敗する傾向があるので、

<?xml version="1.0" encoding="utf-8"?> 
<Deployments MostRecentDate="12/31/2009 8:41:13 PM"> 
    <Filters> 
     <Filter>.cs</Filter> 
     <Filter>.csproj</Filter> 
    </Filters> 
    <Deployment Name="First Deployment" ID="1" Date="6/29/2009 8:41:13 PM"> 
     <File>file1.cs</File> 
     <File>file2.cs</File> 
    </Deployment> 
    <Deployment Name="First Deployment" ID="1" Date="6/29/2009 8:41:13 PM"> 
     <File>file1.cs</File> 
     <File>file2.cs</File> 
    </Deployment> 
    <Deployment Name="First Deployment" ID="1" Date="6/29/2009 8:41:13 PM"> 
     <File>file1.cs</File> 
     <File>file2.cs</File> 
    </Deployment> 
    <Deployment Name="First Deployment" ID="1" Date="6/29/2009 8:41:13 PM"> 
     <File>file1.cs</File> 
     <File>file2.cs</File> 
    </Deployment> 
    <Deployment Name="First Deployment" ID="1" Date="6/29/2009 8:41:13 PM"> 
     <File>file1.cs</File> 
     <File>file2.cs</File> 
    </Deployment> 
</Deployments> 

答えて

3

データ・バインディングは、デバッグに非常に難しいそれらを作るこれ、厳しいです。あなたのコードで1番目の問題は、lbFiles ListBox上のElementNameのスペルミスでした。スペルミスは毎回あなたを得るでしょう!スペルミスを修正し、バインディングのinnerText部分を削除し、ItemTemplateを削除した後で、File名を表示させることができました。なぜItemTemplateが機能していないのか分かりませんが、うまくいけばこの例はあなたをもう一度動かすでしょう。スペルミスを指摘して

<Window x:Class="WpfApplication1.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="600" Width="800"> 
<Window.Resources> 
    <XmlDataProvider x:Key="AllDeployments" XPath="Deployments" Source="Deployments.xml" /> 
    <DataTemplate x:Key="dtDeployments"> 
     <StackPanel FlowDirection="LeftToRight" Orientation="Horizontal"> 
      <TextBlock Text="{Binding [email protected]}" /> 
      <TextBlock Text=" - "/> 
      <TextBlock Text="{Binding [email protected]}" /> 
     </StackPanel> 
    </DataTemplate> 
    <DataTemplate x:Key="dtFiles"> 
     <TextBlock Text="{Binding XPath=File}" /> 
    </DataTemplate> 
</Window.Resources> 
<Grid Name="gMain"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition Width="2"/> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <Menu Grid.Column="0" Grid.ColumnSpan="3"></Menu> 
    <ListBox Grid.Column="0" Name="lbDeployment" 
      ItemsSource="{Binding Source={StaticResource AllDeployments}, XPath=Deployment}" 
      ItemTemplate="{StaticResource dtDeployments}"></ListBox> 
    <GridSplitter Grid.Column="1"></GridSplitter> 
    <StackPanel Grid.Column="2"> 
     <ListBox Name="lbFiles" 
       ItemsSource="{Binding ElementName=lbDeployment, Path=SelectedItem, UpdateSourceTrigger=PropertyChanged}"      
       Height="400" /> 
    </StackPanel> 
</Grid> 

+0

感謝。テンプレートが動作しない場合、私はそれが提供するXPathと何か関係があると疑っています。 – CodeMonkey1313

関連する問題