C# XAML绑定XML属性的数据并显示其值
我正在为WindowsPhone制作简单的RSS阅读器,它使用XML序列化程序读取XML文件并显示项目列表。我有Rss.css文件,其中我有item类(在片段下面): 我在XAML文件中绑定数据,并显示例如标题字段,如下所示:C# XAML绑定XML属性的数据并显示其值,c#,xaml,data-binding,rss,xmlserializer,C#,Xaml,Data Binding,Rss,Xmlserializer,我正在为WindowsPhone制作简单的RSS阅读器,它使用XML序列化程序读取XML文件并显示项目列表。我有Rss.css文件,其中我有item类(在片段下面): 我在XAML文件中绑定数据,并显示例如标题字段,如下所示: <ListView Grid.Row="1" ItemsSource="{Binding Rss.Channel.Items}"> <ListView.ItemTemplate> <DataTemplate>
<ListView Grid.Row="1" ItemsSource="{Binding Rss.Channel.Items}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Title}"/>
<TextBlock Text="{Binding Title.Short}"/>
只需像这样绑定属性:
<ListView Grid.Row="1" ItemsSource="{Binding Rss.Channel.Items}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Title}"/>
<TextBlock Text="{Binding Title.Short}"/>
但它不起作用。我可以在XAML中“访问”它吗?或者我应该在.cs文件中更改一些内容吗
附:给出的例子是我的问题的一个较短的替代方案,因此它不一定非常符合逻辑 您正在绑定到不存在的东西-
Title
是模型中的字符串。您应该对此进行更改,以便反序列化可以为您提供标题和属性:
public class Item
{
[XmlElement("title")]
public Title Title { get; set; }
[XmlElement("link")]
public string Link { get; set; }
}
public class Title
{
[XmlAttribute("short")]
public string Short { get; set; }
[XmlText]
public string Value { get; set; }
}
然后您当前的Title
绑定将更改为Title.Value
和Title.Short
绑定应该可以工作。您应该能够通过使用XPath绑定来实现这一点。类似于这样:
我猜您的意思是{Binding Path=@Short},因为编译器说绑定没有“XPath”这样的属性,但它仍然不起作用。通过一些调试,您应该可以将这个问题一分为二。问题可能是XML未正确反序列化(Short
为null
),或者绑定工作不正常(Short
有值但未绑定到UI)。是哪一个?当我运行应用程序时,在调试输出中出现以下错误:错误:BindingExpression路径错误:“String”上找不到“Short”属性。如果您绑定到Title.Short
,并且上下文是Item
,那么它会神奇地从哪里获取Short
Title
是一个string
-您的错误指出了这一点。非常感谢,它确实可以工作,但是我需要它来从这个标记提取url:
,奇怪的是,在这种情况下它不起作用。结肠可能是问题所在吗?在项目中,我有[xmlement(media:thumbnail)]公共媒体缩略图MediaThumbnail{get;set;}
,下面我有带有url属性的MediaThumbnail类。否,media
是名称空间前缀。在某个地方,您将有一个xmlns:media=”http://example.com/
attribute.xmlement
属性应该包括这一点,例如[xmlement(“缩略图”,名称空间=”http://example.com/”)