Связывание данных сводных элементов с ObservableCollection на WP7 - PullRequest
5 голосов
/ 03 февраля 2011

Я хочу привязать ObservableCollection к элементу управления Pivot в WP7, чтобы каждый объект в моем ObservableCollection стал PivotItem. Это код, который я использую:

    <controls:Pivot x:Name="MainPivot" ItemsSource="{Binding Persons}">
        <controls:Pivot.HeaderTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding FullName}"/>
            </DataTemplate>
        </controls:Pivot.HeaderTemplate>
        <controls:Pivot.ItemTemplate>
            <DataTemplate>
                <StackPanel Margin="0,0,0,17" Width="432">
                    <TextBlock Text="{Binding FirstName}"/>
                    <TextBlock Text="{Binding LastName}"/>
                    <TextBlock Text="{Binding HomeTown}"/>
                </StackPanel>
            </DataTemplate>
        </controls:Pivot.ItemTemplate>
    </controls:Pivot>

Это работает, и с тремя элементами в моей коллекции ObservableCollection я получаю три сводных элемента. Но когда все загрузится, привязка внутри DataTemplate не будет обновлена. Только при переходе к следующему PivotItem загружаются FirstName, LastName и HomeTown.

Почему это? Чего мне не хватает?

Спасибо

Ответы [ 5 ]

4 голосов
/ 03 февраля 2011
1 голос
/ 14 апреля 2011

У меня была та же проблема, но обходной путь с установкой SelectedIndex = 1 меня не устраивал.

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

Person tempPers = new Person() { FullName = "Abduvaliev Edem", FirstName = "Edem", LastName = "Abduvaliev", HomeTown = "Sevastopol"};
Pesrons.Add(tempPers);
0 голосов
/ 20 июля 2011

Вот как я это делаю.Для меня проблема в том, что коллекция обновляется асинхронно в ответ на вызов веб-метода.

void Page_Loaded(object sender, RoutedEventArgs e)
{
    _log.Debug("Page loaded.");

    var vm = this.GetViewModel<TrendsViewModel>();

    if (!vm.IsInitialized)
    {
        vm.PivotItems.CollectionChanged += (origin, args) =>
        {
            this.PivotControl.DataContext = null;
            this.PivotControl.DataContext = vm;
        };

        vm.Initialize(this);
    }
}

Ключ подключает наблюдателя к коллекции, к которой привязаны элементы Pivot, и предоставляет контексту данныхвстряхнуть, когда он обновляется.

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

Похоже, что есть какая-то проблема с порядком загрузки - или с кодом уведомления.

Убедитесь, что вы корректно запускаете событие PropertyChanged, когда задаете свойства для каждого из членов FirstName, LastName и HomeTown.

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

После выполнения простого теста я не могу воспроизвести это поведение. Я помещаю точку останова в блок get эквивалента FirstName с двумя элементами в моей коллекции ObservableCollection, и получаю два попадания.

Как вы обнаружили, что оно не связано? Вы не можете видеть "следующее" содержание сводных элементов, так как?

...