Kein Binding bei XmlDataProvider.Source möglich



  • Ich habe folgende XAML-Datei (gekürzt, nur relevante Inhalte):

    <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
      <Window.Resources>
        <XmlDataProvider x:Key="FeedsDataProvider" Source="feeds.xml" XPath="feeds/feed" />
    
        <DataTemplate x:Key="FeedTabContentTemplate" >
          <DataTemplate.Resources>
            <XmlDataProvider XPath="rss/channel/item" x:Key="FeedDataProvider"/>
          </DataTemplate.Resources>
    
          <ListBox ItemsSource="{Binding Source={StaticResource FeedDataProvider}}" />
        </DataTemplate>
      </Window.Resources>
    
      <Grid>
        <TabControl ContentTemplate="{StaticResource FeedTabContentTemplate}" ItemsSource="{Binding Source={StaticResource FeedsDataProvider}}" />
      </Grid>
    </Window>
    

    XmlDataProvider erbt, weiß Gott warum, nicht von DependencyProperty, deswegen kann in die Source-Eigenschaft des FeedDataProviders nicht per Binding festlegen, was ich aber zur Laufzeit machen muss.

    Mein Problem ist nur folgendes: Ich komme nicht an den XmlDataProvider (FeedDataProvider) heran um die Source-Eigenschaft zu setzen.

    Ich habe bereits versucht im SelectionChanged-Event des TabControls auf das ContentTemplate des TabItems zuzugreifen:

    private void feedTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
      XmlElement item = feedTabControl.SelectedItem as XmlElement;
    
      if(item == null)
        return;
    
      TabItem tabItem = feedTabControl.ItemContainerGenerator.ContainerFromIndex(feedTabControl.SelectedIndex) as TabItem;
    
      if(tabItem == null)
        return;
    
      DataTemplate dt = tabItem.ContentTemplate;
    }
    

    Allerdings ist das Template leer (null), da es sich beim Inhalt um ein XmlElement handelt.

    Mache ich konzeptionell schon etwas falsch in dem ich den XmlDataProvider in die Resource des DataTemplates packe?
    Wie komme ich zur Laufzeit dazu die Source-Eigenschaft zu setzten?

    PS: Die Uri, die gesetzt werden soll, befindet sich in der Datei "feeds.xml":

    <feeds>
      <feed>
        <uri>http://www.beispiel-website.de/feed.rss</uri>
      </feed>
    </feed>
    

Anmelden zum Antworten