2016-05-23 10 views
1

Ich habe eine GridView, von der die ItemsSource an eine Liste von StreamCollections gebunden ist. In der ItemsTemplateSelector, ändere ich die DataTemplate je nach Wert dieser StreamCollection.Ändern der Bindungsquelle eines gridviewitem

protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) 
{ 
    FrameworkElement element = container as FrameworkElement; 
    if (element != null && item is StreamCollection) 
    { 
     StreamCollection stream = (StreamCollection) item; 
     if (stream.Playlist != null) 
     { 
      return Application.Current.Resources["PlaylistDataTemplate"] as DataTemplate; 
     } 
     if (stream.Track != null) 
     {    
      return Application.Current.Resources["TrackDataTemplate"] as DataTemplate; 
     } 
    } 
    return null; 
} 

Wenn die Playlist nicht null ist, sollte die GridViewItem haben als die Playlist Bindung; gleich für Track. Das FrameworkElement Element ist vom Typ GridViewItem, aber ich kann keinen Hinweis auf die BindingSource finden.

+0

Was ist der XAML-Code? Können Sie ohne den Template-Selektor versuchen, nur um sicher zu sein, dass Ihr XAML-Code und die Bindung für einen der Elementtypen (Track zum Beispiel) in Ordnung ist? –

+0

Die Bindung funktioniert für das Element Track und für Playlisten. Aber in meiner Liste kann es zwei verschiedene Typen geben, entweder einen Track oder eine Playlist. Aus diesem Grund erstelle ich ein GridView, das an StreamCollection gebunden ist (das eine Eigenschaftsspur und eine Wiedergabeliste enthält). –

+0

Ich verstehe, dass die Bindung Ihrer Listen- und Listenelemente nicht funktioniert, wenn Sie den TemplateSelector verwenden. Also kannst du es bitte versuchen, ohne es zu benutzen, um zu überprüfen, ob das Problem wirklich hier ist. Oder erarbeiten Sie Ihr Problem, wenn das nicht Ihr Problem ist? –

Antwort

0

Nicht sicher kann es helfen, oder nicht, aber wenn ich ähnliche Bedürfnisse haben habe ich Wörterbuch aus der Anwendung entfernt:

App.Current.Resources.MergedDictionaries.Remove(App.Current.Resources.MergedDictionaries.Last()); 

Und haben fügen neue

ResourceDictionary dict = new ResourceDictionary(); 
dict.Source = new Uri("ms-appx:AppStyle1.xaml"); 
Application.Current.Resources.MergedDictionaries.Add(dict); 

So können Sie versuchen, setze deine Vorlage in das Wörterbuch und ersetze sie auf diese Weise

Verwandte Themen