开发者

How to make binding between XElement and ListBox ?

I hold XElement - that appear as this

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

I want to show this Element + value on some ListBox.

So i define this xaml - but nothing work ... How can i do it right ?

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

         开发者_JAVA百科         <TextBlock Grid.Column="0" Text="{Binding Element}" />
                  <TextBlock Grid.Column="1" Text="{Binding Value  }" />
               </Grid>
            </DataTemplate>
      </ListBox.ItemTemplate>
   </ListBox>


An XElement does not have a IEnumerable interface through which to list its child elements. In order to enumerate the elements you need to call the Elements() method. To assist you could create a value converter:-

 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();
    }
 }

Now your Xaml should look like:-

<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>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜