WP7 Databind с Pivot - не уверен, где я иду не так - PullRequest
0 голосов
/ 16 февраля 2012

Редактировать:

Решил проблему - см. Принятый ответ для хорошего объяснения!

Мой XAML теперь выглядит так:

        <controls:Pivot x:Name="MainPivot" Title="FYP APP" ItemsSource="{Binding Cuisines}">
            <controls:Pivot.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Cuisine}"/>
                </DataTemplate>
            </controls:Pivot.HeaderTemplate>
            <controls:Pivot.ItemTemplate>
                <DataTemplate>
                    <ListBox Margin="0,0,-12,0" ItemsSource="{Binding Outlets}">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Margin="0,0,0,17" Width="432" Height="78">
                                    <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                                    <TextBlock Text="{Binding Cuisine}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                                </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                </DataTemplate>
            </controls:Pivot.ItemTemplate>
        </controls:Pivot>

Оригинал:

Я создаю Pivot-страницу, используя образец, поставляемый с VS.

У меня есть список ресторанов, которые я бы хотел отфильтровать, проводя по оси вправо / влево (например, http://img831.imageshack.us/img831/514/pivotm.jpg).

У меня есть список всех ресторановв App.xaml.cs (public static ObservableCollection<OutletViewModel> LocalOutlets, который заполняется из конструктора MainPage), и это затем обрабатывается для создания этой структуры:

OutletListPage2.xaml.cs (страница, над которой я работаю) устанавливает DataContextдля нового OutletsByCuisineViewModel().

OutletsByCuisineViewModel имеет public ObservableCollection<CuisineViewModel> Cuisines, который содержит CuisineViewModel для каждой кухни (включая «все»).

A CuisineViewModelимеет public string Cuisine и public ObservableCollection<OutletViewModel> Outlets.

. OutletViewModel содержит public string Name и public string Cuisine - каждый из которых вызывает событие PropertyChanged.

Пример проектированияя хочу использовать следующие данные: (также я не могу указать один и тот же выход несколько раз в этом файле - VS говорит, что имя XYZ уже существует в текущей области имен)

<local:OutletsByCuisineViewModel 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"       
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:FYP.ViewModels">

    <local:OutletsByCuisineViewModel.Cuisines>

        <local:CuisineViewModel Cuisine="all">
            <local:CuisineViewModel.Outlets>
                <local:OutletViewModel Name="Test1" Cuisine="fast food" />
                <local:OutletViewModel Name="Test2" Cuisine="indian" />
                <local:OutletViewModel Name="Test3" Cuisine="pizza" />
            </local:CuisineViewModel.Outlets>
        </local:CuisineViewModel>

        <local:CuisineViewModel Cuisine="fast food">
            <local:CuisineViewModel.Outlets>
                <local:OutletViewModel Name="Test1a" Cuisine="fast food" />
            </local:CuisineViewModel.Outlets>
        </local:CuisineViewModel>

        <local:CuisineViewModel Cuisine="indian">
            <local:CuisineViewModel.Outlets>
                <local:OutletViewModel Name="Test2a" Cuisine="indian" />
            </local:CuisineViewModel.Outlets>
        </local:CuisineViewModel>

        <local:CuisineViewModel Cuisine="pizza">
            <local:CuisineViewModel.Outlets>
                <local:OutletViewModel Name="Test3a" Cuisine="pizza" />
            </local:CuisineViewModel.Outlets>
        </local:CuisineViewModel>

    </local:OutletsByCuisineViewModel.Cuisines>

</local:OutletsByCuisineViewModel>

У меня в конструкторе XAML есть следующее: http://img844.imageshack.us/img844/8464/pivot2.jpg

Мне не удалось найти в Интернете ничего, что могло бы помочь, возможно, потому что я не уверен, что не так.

Любые предложения или указатели будут с благодарностью:)

1 Ответ

1 голос
/ 16 февраля 2012

Просмотр последнего снимка экрана - когда вы устанавливаете свойство ItemsSource, Pivot игнорирует коллекцию PivotItems, заданную вами явно, и создает новый на основе коллекции ItemsSource.Таким образом, вы можете попытаться удалить объявление PivotItem и использовать только ItemsSource, связать его с коллекцией моделей представлений и использовать комбинацию свойств Pivot.ItemTemplate и Pivot.ItemContainerStyle, чтобы правильно стилизовать элементы сводки (установить заголовок и содержимое).

...