带有ListBox的DataBound Pivot - 设计时样本数据

时间:2011-12-15 13:51:01

标签: xaml windows-phone-7 listbox pivot

在我的MainPage上是一个绑定到位置列表的数据透视表。每个位置都有一个属性'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中包含所有相应的RoomNumbers。完美!

但是当我尝试在设计时添加一些样本数据时,我无法显示数据。 我将Blend-namespace添加到PhoneApplicationPage和designtime-datacontext:

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

示例数据包含一些嵌套房间的位置,但房间不显示。 显示了pivot-header,因此它根本不会出错。但是内部ListBox是空的,因此我无法在视觉上设计ListBoxItems。

首先,我认为它与未显示第一页的pivotots itemindex错误有关。但是将xaml中的itemindex设置为0或1并不起作用。

我也尝试了一些不同的方法来绑定数据,但没有任何作用。因此,经过几个小时的尝试和搜索网络,我希望有人有一个想法。

一些旁注:

  • 我不知道是否重要,但最后我想我会使用SL-Toolkits LongListSelector而不是ListBox

  • 因为它在运行时已经运行良好,所以我更喜欢仅使用XAML的解决方案,因为我不想仅仅为了让设计师工作而改变我的ViewModel。但如果没有选择,我将改变视图模型。

编辑: 对不起,应该已经添加了使用过的样本数据。这是:

<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 :(得分:0)

好的,它现在有效。

问题是,我不确定究竟是什么解决了这个问题。但这就是我所做的:

  • 自从提出这个问题后,我重组了这个项目。我没有更改类,示例数据和xaml。但我把它全部移到了一个类库而不是电话应用程序。

  • 在创建新类库之后,我使用NuGet添加了silverlight工具包,因此我获得了比以前使用的工具包更新版本。

  • 在ViewModel的构造函数中,我添加了这个:this.Locations = new ObservableCollection<Location>();如果没有这一行,它的可重现性不起作用。但它根本不起作用。在重组之前,我看到了标题,只有内容丢失了。当我现在删除此行时,标题也会丢失。

我认为这是更新的工具包与在构造函数中创建ObservableCollection相结合。但我不确定