您可以使用 IValueConverter 来完成此操作。这是一个简单的:
public class XAttributeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var xml = value as XElement;
var name = parameter as string;
return xml.Attribute(name).Value;
}
}
然后在 Xaml 中,您可以引用类型转换器并将属性名称作为参数传递:
<ListBox x:Name="ItemList">
<ListBox.Resources>
<local:XAttributeConverter x:Name="xcvt" />
</ListBox.Resources>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Converter={StaticResource xcvt}, ConverterParameter=forename}" />
<TextBlock Text="{Binding Converter={StaticResource xcvt}, ConverterParameter=surname}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这是当您绑定到 XElement 中加载的 xml 时:
XElement xml = XElement.Parse("<root><item forename='Fred' surname='Flintstone' /><item forename='Barney' surname='Rubble' /></root>");
ItemList.ItemsSource = xml.Descendants("item");
这不是一个超级优雅的绑定语法,但它确实有效并且比映射到类更容易。