2011-09-26 29 views
1

我持有的XElement - 出現,因爲這如何在XElement和ListBox之間進行綁定?

<Root>  
    <child1>1</child1>  
    <child2>2</child2>  
    <child3>3</child3> 
    <child4>4</child4> 
</Root> 

我想將此元+價值上的一些列表框。

所以我定義這個xaml - 但沒有工作... 我該怎麼做對不對?

<ListBox ItemsSource="{Binding XMLProperty}" > 
    <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*.5" /> 
         <ColumnDefinition Width="*.5" /> 
        </Grid.ColumnDefinitions> 

        <TextBlock Grid.Column="0" Text="{Binding Element}" /> 
        <TextBlock Grid.Column="1" Text="{Binding Value }" /> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
+0

你所說的「顯示此元素」是什麼意思?你的意思是元素名稱?你還綁定了什麼XMLProperty? – Bryant

回答

1

XElement沒有IEnumerable接口,通過它可以列出其子元素。爲了枚舉您需要調用Elements()方法的元素。爲了幫助您可以創建一個值轉換器: -

public class ElementConverter : IValueConverter 
{ 

    public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     XElement source = value as XElement; 
     if (source != null) 
     { 
      return source.Elements(); 
     } 

     return null; 
    } 

    public override object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

現在XAML中應該是這樣的: -

<Grid.Resources> 
    <local:ElementConverter x:Key="conv" /> 
</Grid.Resources> 

... 

<ListBox ItemsSource="{Binding XMLProperty, Converter={StaticResources conv}}" > 
    <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
        </Grid.ColumnDefinitions> 

        <TextBlock Grid.Column="0" Text="{Binding Name.LocalName}" /> 
        <TextBlock Grid.Column="1" Text="{Binding Value }" /> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox>