Связывание текста в Pivot.HeaderTemplate - PullRequest
1 голос
/ 14 февраля 2011

Я совершенно сбит с толку, пытаясь решить свою проблему в течение нескольких часов для себя, но слишком много вопросительных знаков. Может быть, вы можете помочь мне: -)

Я хочу иметь сводную таблицу и привязывать элементы к is, поэтому я написал класс PivotViewModel, который содержит ObservableCollection (CategoryPageList):

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

    private CategoryPageList categoryPages;

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

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

CategoryPageList имеет тип CategoryPage, класс, который содержит данные, с которыми я хочу связать, "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");
            }
        }
    }
}

Когда мое приложение загружено, я хочу видеть PivotItem для каждой CategoryPage с «CategoryName» -Property в качестве заголовка этого PivotItem. С помощью Expression Blend я создал следующий XAML-код, но он не работает, Pivot остается пустым:

<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>

DataContext связан в коде в конструкторе страницы:

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

        LayoutRoot.DataContext = App.PivotViewModel;
    }
}

Я абсолютный новичок и не очень разбираюсь, но могу сказать лишь одно: в XAML Text="{Binding CategoryPages[0].CategoryName}" выглядит странно для меня.

Кто-нибудь видит ошибку? Было бы действительно здорово! С наилучшими пожеланиями!

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Попробуйте вставить пустой / фиктивный DataContext="{Binding}" в тег Pivot.

Удалить CategoryPages[0], так как у вас нет доступа к коллекции CategoryPages здесь ..

0 голосов
/ 14 февраля 2011

Попробуйте удалить CategoryPages [0].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...