2011-02-13 1 views
1

Je suis totalement confus après avoir essayé de résoudre mon problème pendant plusieurs heures pour moi-même, mais il y a juste trop de points d'interrogation. Peut-être vous pouvez me aider :-)Texte de liaison dans Pivot.HeaderTemplate

Je veux avoir un pivot et de reliure à est, j'ai donc écrit une classe PivotViewModel qui contient un ObservableCollection (CategoryPageList):

public class PivotViewModel 
{ 
    public class CategoryPageList : ObservableCollection<CategoryPage> 
    {} 

    private CategoryPageList categoryPages; 

    public PivotViewModel() 
    { 
     categoryPages = new CategoryPageList(); 
    } 

    public CategoryPageList CategoryPages 
    { 
     get { return categoryPages; } 
    } 
} 

Le CategoryPageList est de la Type CategoryPage, une classe qui contient les données que je veux lier à la « CategoryName »:

public class CategoryPage : INotifyPropertyChanged 
{ 
    private string categoryName; 

    public CategoryPage(string categoryName) 
    { 
     CategoryName = categoryName; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    public string CategoryName 
    { 
     get { return categoryName; } 
     set 
     { 
      if (categoryName != value) 
      { 
       categoryName = value; 
       NotifyPropertyChanged("CategoryName"); 
      } 
     } 
    } 
} 

Quand mon application est chargée, je veux voir un PivotItem pour chaque CategoryPa ge avec le "CategoryName" -Property en tant qu'en-tête de ce PivotItem. Avec Expression Blend j'ai créé le XAML code suivant, mais il ne fonctionne pas, le pivot reste vide:

<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <Grid.DataContext> 
     <RssReader_ViewModel:PivotViewModel/> 
    </Grid.DataContext> 
    <controls:Pivot Title="pivot" ItemsSource="{Binding CategoryPages}"> 
     <controls:Pivot.Resources> 
      <DataTemplate x:Key="CategoryPivotItemHeaderTemplate"> 
       <TextBlock TextWrapping="Wrap" Text="{Binding CategoryPages[0].CategoryName}"/> 
      </DataTemplate> 
      <DataTemplate x:Key="CategoryPivotItemTemplate"> 
       <Grid> 
        <ListBox/> 
       </Grid> 
      </DataTemplate> 
     </controls:Pivot.Resources> 
     <controls:Pivot.ItemTemplate> 
      <StaticResource ResourceKey="CategoryPivotItemTemplate"/> 
     </controls:Pivot.ItemTemplate> 
     <controls:Pivot.HeaderTemplate> 
      <StaticResource ResourceKey="CategoryPivotItemHeaderTemplate"/> 
     </controls:Pivot.HeaderTemplate> 
     <controls:Pivot.DataContext> 
      <RssReader_ViewModel:PivotViewModel/> 
     </controls:Pivot.DataContext> 
    </controls:Pivot> 
</Grid> 

Le DataContext est lié dans le code dans le constructeur de la page:

public partial class MainPage : PhoneApplicationPage 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 

     LayoutRoot.DataContext = App.PivotViewModel; 
    } 
} 

Je suis un débutant total et je n'ai pas beaucoup d'idée, mais la seule chose que je peux dire, c'est que le XAML en Text="{Binding CategoryPages[0].CategoryName}" me semble étrange.

Quelqu'un voit-il un bogue? Serait vraiment génial! Cordialement!

+0

Pouvez-vous poster un exemple complet de ce que vous essayez de faire. Je regarde ce que vous avez fait mais il manque de grandes parties que je n'aurais pas à deviner. –

Répondre

1

Essayez d'insérer un DataContext="{Binding}" vide/factice dans le tag Pivot.

Retirez CategoryPages[0] puisque vous n'avez pas accès à la collection de CategoryPages ici ..

0

Essayez de supprimer CategoryPages [0].

Questions connexes