2

私は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&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 がコンテンツを更新していません。どうすればよいですか?

4

1 に答える 1

0

実際、Refresh ...を呼び出したり、XmlNamespaceMangerを設定したりする必要はないと思います。Refreshの呼び出しは、実際にはXmlDataProviderにすでに持っていたのと同じソースをリロードするように指示していると思います。

ソースを変更すると、ロードロジックをトリガーするために必要なすべてのことが必要になります。XmlNamespaceManagerをリセットしたい場合は、DeferRefreshを呼び出す必要があります。そうしないと、プロバイダーはプロパティが変更されるたびにリロードします。

于 2009-10-27T17:35:11.590 に答える