2009-06-30 5 views
0

일부 WPF 데이터 바인딩을 수행하려고하는데, 지금은 약간 매달려 있습니다. 두 개의 목록 상자와 XML 파일이 있습니다. 첫 번째 목록 상자가 XML 소스에 성공적으로 바인딩됩니다. 그러나 첫 번째 목록 상자에서 두 번째 목록 상자의 원본으로 선택한 항목의 자식 바인딩 할 때 아무 것도 나타납니다. 목표는 색인 또는 조회 (색인을 하나 선택하여 관련 항목을 찾는 결과)와 같은 것입니다. 데이터 바인딩을 위해 여기에 뭔가 빠져 있습니까? 아래의 XAML 및 XMLWPF XML DataBinding

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

데이터 바인딩이 힘들 수 있습니다. 코드에서 가장 큰 문제는 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