[英]XmlDataProvider Refresh source WPF
我有一個WPF網格
<Window x:Class="LabsRSS.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Poperecinii Timur Lab" Height="404" Width="588">
<Grid x:Name="blah">
<Grid.Resources>
<XmlDataProvider x:Key="flickrdata" Source="http://api.flickr.com/services/feeds/photos_public.gne?tags=dog&lang=en-us&format=rss_200">
<XmlDataProvider.XmlNamespaceManager>
<XmlNamespaceMappingCollection>
<XmlNamespaceMapping Prefix="media" Uri="http://search.yahoo.com/mrss/"/>
</XmlNamespaceMappingCollection>
</XmlDataProvider.XmlNamespaceManager>
</XmlDataProvider>
<DataTemplate x:Key="itemTemplate">
<Image Width="75" Height="75" Source="{Binding Mode=OneWay, XPath=media:thumbnail/@url}"/>
</DataTemplate>
<ControlTemplate x:Key="controlTemplate" TargetType="{x:Type ItemsControl}">
<WrapPanel IsItemsHost="True" Orientation="Horizontal"/>
</ControlTemplate>
</Grid.Resources>
<ItemsControl
Width="375"
ItemsSource="{Binding Mode=Default, Source={StaticResource flickrdata}, XPath=/rss/channel/item}"
ItemTemplate="{StaticResource itemTemplate}"
Template="{StaticResource controlTemplate}">
</ItemsControl>
<TextBox Height="23" Margin="193,0,213,24" Name="textBox1" VerticalAlignment="Bottom" TextChanged="textBox1_TextChanged" />
</Grid>
我想做的是用我自己從TextBox輸入的內容替換標記。
private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
XmlDataProvider dataProvider = (XmlDataProvider)this.blah.FindResource("flickrdata");
XmlNamespaceManager xnManager = dataProvider.XmlNamespaceManager;
string newSource = "http://api.flickr.com/services/feeds/photos_public.gne?tags=flower&lang=en-us&format=rss_200";
newSource = Regex.Replace(newSource, "(^.*tags=)(.+?)(&.*$)", String.Format("{0}{1}{2}", "$1", textBox1.Text, "$3"));
dataProvider.Source = new Uri(newSource);
dataProvider.XmlNamespaceManager = xnManager;
dataProvider.Refresh();
}
現在uri似乎設置好了,但是dataProvider沒有刷新內容,我該怎么辦?
我實際上不認為您想致電Refresh ...或為此重新設置XmlNamespaceManger。 我認為對Refresh的調用實際上是在告訴XmlDataProvider重新加載它已經擁有的相同源。
當您更改Source時,觸發加載邏輯就應該是全部。 如果確實要重新設置XmlNamespaceManager,則應調用DeferRefresh,因為否則提供程序將在每次屬性更改時重新加載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.