2010-04-15 8 views
1

목록 상자를 XML 데이터 소스 (텍스트 .xml 파일)에 올바르게 바인딩하는 데 문제가 있습니다. 내가 여기에 표시된 인라인 XML 소스에 바인딩 할 책 목록과 마이크로 소프트 예에 따라 XML에 WPF 및 LINQ를 사용하는 방법을 배우고WPF 및 LINQ to XML 목록 상자에 데이터 바인딩

...

http://msdn.microsoft.com/en-us/library/bb669149.aspx

내가 외부 xml 파일에 올바르게 바인딩되도록이 응용 프로그램을 변경하십시오.

그래서, 나는 CodeProject의 기사의 예에 수정 사항을 따르려고 노력 238_How_to_perform_WPF_Data_Binding_using_LINQ_to_XML _-_ Part_2.aspx

(XAML 코드는 아래에 포함되어 있습니다)

를 사용하는 응용 프로그램을 수정하는 방법을 보여줍니다

외부 XML 파일.

문제는 응용 프로그램이 시작될 때 목록 상자가 이미 내 xml 파일에있는 데이터를 표시하거나로드하지 않는다는 것입니다. xml 데이터 문자열은 위의 텍스트 상자에 올바르게 표시되어 있으며 Add 함수를 사용하여 목록 상자에 올바르게 표시되는 NEW 책을 추가 할 수 있으며이를 선택하여 편집 할 수 있습니다. 기존 데이터를로드하지 않습니다. 시작 또는 초기화시 XML 파일에서 가져옵니다.

누군가가이 예제를 시도한 적이 있습니까? 아니면 누구나 XML 파일에 바인딩 된 목록 상자 또는 데이터 격자의 작동 예제가 있습니까?

내가 가지고있는 XAML 코드는 아래와 같습니다. 누군가가 오류를 지적 할 수 있습니까?

<Window x:Class="LinqToXmlDataBinding.L2XDBForm" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:system="clr-namespace:System;assembly=mscorlib" 
xmlns:xlinq="clr-namespace:System.Xml.Linq;assembly=System.Xml.Linq" 
xmlns:local="clr-namespace:LinqToXmlDataBinding" 
Title="WPF Data Binding using LINQ-to-XML" Height="665" Width="500" ResizeMode="NoResize"> 

<Window.Resources> 
    <!-- Books provider and inline data --> 
    <ObjectDataProvider x:Key="LoadedBooks" ObjectType="{x:Type xlinq:XElement}" MethodName="Load"> 
     <ObjectDataProvider.MethodParameters> 
      <system:String>C:\Files\devel\linq example\LinqToXMLDataBinding\mydata.xml</system:String>     
      <xlinq:LoadOptions>PreserveWhitespace</xlinq:LoadOptions> 
     </ObjectDataProvider.MethodParameters> 
    </ObjectDataProvider> 

    <!-- Template for use in Books List listbox. --> 
    <DataTemplate x:Key="BookTemplate"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Margin="3" Text="{Binding Path=Attribute[id].Value}"/> 
      <TextBlock Margin="3" Text="-"/> 
      <TextBlock Margin="3" Text="{Binding Path=Element[title].Value}"/> 
     </StackPanel> 
    </DataTemplate> 
</Window.Resources> 

<!-- Main visual content container --> 
<StackPanel Background="lightblue" DataContext="{Binding Source={StaticResource LoadedBooks}}"> 
    <!-- Raw XML display section --> 
    <DockPanel Margin="5"> 
     <Label Background="Gray" FontSize="12" BorderBrush="Black" BorderThickness="1" FontWeight="Bold">XML 
      <Label.LayoutTransform> 
       <RotateTransform Angle="90"/> 
      </Label.LayoutTransform> 
     </Label> 
     <TextBlock Name="tbRawXml" Height="200" Background="LightGray" Text="{Binding Path=Xml}" TextTrimming="CharacterEllipsis" /> 
    </DockPanel> 

    <Separator Height="4" Margin="5" /> 

    <!-- List box to display all books section --> 
    <DockPanel Margin="5"> 
     <Label Background="Gray" FontSize="12" BorderBrush="Black" BorderThickness="1" FontWeight="Bold">Book List 
      <Label.LayoutTransform> 
       <RotateTransform Angle="90"/> 
      </Label.LayoutTransform> 
     </Label> 
     <ListBox Name="lbBooks" Height="200" Width="415" ItemTemplate ="{StaticResource BookTemplate}"> 
      <ListBox.ItemsSource> 
       <Binding Path="xml"/> 
      </ListBox.ItemsSource> 
     </ListBox> 
     <Button Margin="5" DockPanel.Dock="Right" Height="30" Width ="130" Content="Remove Selected Book" Click="OnRemoveBook"> 
      <Button.LayoutTransform> 
       <RotateTransform Angle="90"/> 
      </Button.LayoutTransform> 
     </Button> 
    </DockPanel> 

    <Separator Height="4" Margin="5" /> 

    <!-- Edit current selection section --> 
    <DockPanel Margin="5"> 
     <TextBlock Margin="5" Height="30" Width="65" DockPanel.Dock="Right" Background="LightGray" TextWrapping="Wrap" TextAlignment="Center"> 
       Changes are live! 
      <TextBlock.LayoutTransform> 
       <RotateTransform Angle="90"/> 
      </TextBlock.LayoutTransform> 
     </TextBlock> 
     <StackPanel> 
      <Label Width="450" Background="Gray" FontSize="12" BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" FontWeight="Bold">Edit Selected Book</Label> 
      <StackPanel Margin="1" DataContext="{Binding ElementName=lbBooks, Path=SelectedItem}"> 
       <StackPanel Orientation="Horizontal"> 
        <Label Width="40">ID:</Label> 
        <TextBox Name="editAttributeTextBox" Width="410" Text="{Binding Path=Attribute[id].Value}"> 
         <TextBox.ToolTip> 
          <TextBlock FontWeight="Bold" TextAlignment="Center"> 
           <Label>Edit the selected book ID and see it changed.</Label> 
          </TextBlock> 
         </TextBox.ToolTip> 
        </TextBox> 
       </StackPanel> 
       <StackPanel Orientation="Horizontal"> 
        <Label Width="40">Value:</Label> 
        <TextBox Name="editValueTextBox" Width="410" Text="{Binding Path=Element[title].Value}" Height="25"> 
         <TextBox.ToolTip> 
          <TextBlock FontWeight="Bold" TextAlignment="Center"> 
           <Label>Edit the selected book Value and see it changed.</Label> 
          </TextBlock> 
         </TextBox.ToolTip> 
        </TextBox> 
       </StackPanel> 
      </StackPanel> 
     </StackPanel> 
    </DockPanel> 

    <Separator Height="4" Margin="5" /> 

    <!-- Add new book section --> 
    <DockPanel Margin="5"> 
     <Button Margin="5" Height="30" DockPanel.Dock="Right" Click ="OnAddBook">Add Book 
      <Button.LayoutTransform> 
       <RotateTransform Angle="90"/> 
      </Button.LayoutTransform> 
     </Button> 
     <StackPanel> 
      <Label Width="450" Background="Gray" FontSize="12" BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" FontWeight="Bold">Add New Book</Label> 
      <StackPanel Margin="1"> 
       <StackPanel Orientation="Horizontal"> 
        <Label Width="40">ID:</Label> 
        <TextBox Name="tbAddID" Width="410"> 
         <TextBox.ToolTip> 
          <TextBlock FontWeight="Bold" TextAlignment="Center"> 
           <Label>Enter a book ID and Value pair, then click Add Book.</Label> 
          </TextBlock> 
         </TextBox.ToolTip> 
        </TextBox> 
       </StackPanel> 
       <StackPanel Orientation="Horizontal"> 
        <Label Width="40">Value:</Label> 
        <TextBox Name="tbAddValue" Width="410" Height="25"> 
         <TextBox.ToolTip> 
          <TextBlock FontWeight="UltraBold" TextAlignment="Center"> 
           <Label>Enter a book ID and Value pair, then click Add Book.</Label> 
          </TextBlock> 
         </TextBox.ToolTip> 
        </TextBox> 
       </StackPanel> 
      </StackPanel> 
     </StackPanel> 
    </DockPanel> 
</StackPanel> 
</Window> 

답변

0

당신은 아마 지금이 알아 냈하지만 필요한 한 가지 네임 스페이스와 데이터 템플릿의 요소 참조를보다 선행하는 것입니다 (해야합니다, 당신은 정확히 예를 들어 다음과 같은 한 경우) 외부 XML에 파일 : Text = "{Binding Path = 요소 [{http://www.mybooks.com} id] .Value}"/>

아직까지 나오지 않은 나머지 문제를 해결하지 못했습니다. -