XmlDataProvider Обновить исходный WPF - PullRequest
2 голосов
/ 27 октября 2009

У меня есть WPF Grid

<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&amp;lang=en-us&amp;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&amp;lang=en-us&amp;format=rss_200";
        newSource = Regex.Replace(newSource, "(^.*tags=)(.+?)(&amp;.*$)", String.Format("{0}{1}{2}", "$1", textBox1.Text, "$3"));
        dataProvider.Source = new Uri(newSource);
        dataProvider.XmlNamespaceManager = xnManager;
        dataProvider.Refresh();

    }

Теперь URI, кажется, настроен хорошо, но dataProvider не обновляет содержимое, как я могу это сделать?

1 Ответ

0 голосов
/ 27 октября 2009

Я на самом деле не думаю, что вы хотите вызвать Refresh ... или re - установите XmlNamespaceManger в этом отношении. Я думаю, что вызов Refresh фактически говорит XmlDataProvider о необходимости перезагрузить тот же источник, который у него уже был.

Когда вы меняете источник, это должно быть все, что необходимо для запуска логики загрузки. Если вы действительно хотите переустановить XmlNamespaceManager, вам следует вызвать DeferRefresh, поскольку в противном случае поставщик будет перезагружаться при каждом изменении свойства.

...