DataBound Pivot с ListBox - примерные данные времени разработки - PullRequest
1 голос
/ 15 декабря 2011

На моей главной странице есть пивот, связанный со списком мест.Каждое местоположение имеет свойство RoomNumber, которое связано с внутренним ListBox.

Это XAML:

<controls:Pivot x:Name="mainPivot" ItemsSource="{Binding Locations}" Title="App-Title">
        <controls:Pivot.HeaderTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding LocationName}" />
            </DataTemplate>
        </controls:Pivot.HeaderTemplate>

        <controls:Pivot.ItemTemplate>
            <DataTemplate>
                <ListBox ItemsSource="{Binding Path=Rooms}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <ListBoxItem>
                                <TextBlock Text="{Binding RoomNumber}" />
                            </ListBoxItem>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
             </DataTemplate>
        </controls:Pivot.ItemTemplate>
    </controls:Pivot>

Во время выполнения это приводит к наличию PivotItem для каждого местоположения и всехсоответствующие номера комнат во вложенном ListBox.Отлично!

Но когда я пытаюсь добавить пример данных во время разработки, я не могу получить их для отображения данных.Я добавил Blend-namespace к PhoneApplicationPage и designtime-datacontext:

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DataContext="{d:DesignData SampleData/MainViewModelSampleData.xaml}"

Образцы данных содержат некоторые местоположения с вложенными комнатами, но комнаты не отображаются.Сводные заголовки показаны, поэтому они не могут быть неправильными вообще.Но внутренний ListBox пуст, так что я не могу визуально спроектировать ListBoxItems.

Сначала я подумал, что это как-то связано с ошибкой pivots itemindex, не показывающей первую страницу.Но установка itemindex в xaml на 0 или 1 не помогает.

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

некоторые sidenotes:

  • Я не знаю, имеет ли это значение, но в конце концовЯ думаю, что я буду использовать SL-Toolkits LongListSelector вместо ListBox

  • Поскольку он уже отлично работает во время выполнения, я бы предпочел решение только для XAML, потому что я бы предпочел неизменить мою ViewModel только для того, чтобы дизайнер работал.Но если выбора нет, я все же изменю модель представления.

edit: извините, следовало добавить использованные данные примера.вот оно:

<local:MainViewModel 
    ... some namespaces ...
    >

    <local:MainViewModel.Locations>
        <PCSE:Location Id="1" LocationName="a name">
            <PCSE:Location.Rooms>
                <PCSE:Room Id="1" Date="10.08.2011" RoomNumber="1">
                </PCSE:Room>
                <PCSE:Room Id="2" Date="11.08.2011" RoomNumber="66">
                </PCSE:Room>
                <PCSE:Room Id="3" Date="12.08.2011" RoomNumber="45">
                </PCSE:Room>
            </PCSE:Location.Rooms>
        </PCSE:Location>
        ... some more locations ...
    </local:MainViewModel.Locations>

</local:MainViewModel>

Это сокращено.Есть больше мест, и в комнатах есть несколько дочерних узлов.Я также удалил некоторые атрибуты из локаций, а также из комнат, чтобы сделать его более читабельным.

К вашему сведению: нет подчеркнутого красным узла / атрибута, поэтому я предполагаю, что опечаток нет.

1 Ответ

0 голосов
/ 20 декабря 2011

Хорошо, теперь работает.

Проблема в том, что я не уверен, что именно решило проблему. Но вот что я сделал:

  • С тех пор, как я задал этот вопрос, я реструктурировал проект. Я не менял классы, пример данных и xaml. Но я переместил все это в библиотеку классов вместо приложения телефона.

  • После создания новой библиотеки классов я добавил набор инструментов Silverlight с NuGet, поэтому я получил более новую версию набора инструментов, чем я использовал раньше.

  • В конструкторе ViewModel я добавил это: this.Locations = new ObservableCollection<Location>();
    Без этой строки воспроизводимость не работает. Но это не работает вообще. До реструктуризации я видел заголовки, и отсутствовал только контент. Когда я сейчас удаляю эту строку, заголовки тоже отсутствуют.

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

...