在我的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>
这缩短了。有更多的位置,房间有一些子节点。我还从位置和房间中删除了一些属性,使其更具可读性。
仅供参考:没有红色下划线的节点/属性,所以我假设没有拼写错误。
答案 0 :(得分:0)
好的,它现在有效。
问题是,我不确定究竟是什么解决了这个问题。但这就是我所做的:
自从提出这个问题后,我重组了这个项目。我没有更改类,示例数据和xaml。但我把它全部移到了一个类库而不是电话应用程序。
在创建新类库之后,我使用NuGet添加了silverlight工具包,因此我获得了比以前使用的工具包更新版本。
在ViewModel的构造函数中,我添加了这个:this.Locations = new ObservableCollection<Location>();
如果没有这一行,它的可重现性不起作用。但它根本不起作用。在重组之前,我看到了标题,只有内容丢失了。当我现在删除此行时,标题也会丢失。
我认为这是更新的工具包与在构造函数中创建ObservableCollection相结合。但我不确定