我不理解“HeaderTemplate”和“ItemTemplate”中DataContext的行为。为什么他们的行为不同?在“ItemTemplate”中,Designer知道该DataTemplate的DataContext是ViewModel,我可以引用所有VM的(公共)属性。
在“HeaderTemplate”内部,情况并非如此。 Designer / IntelliSense未显示ViewModel的可用属性。在WPF中,您可以通过将VM的DataType添加到DataTemplate来解决这个问题,但是WindowsPhone中没有DataType(我认为在WinRT中也没有)。应用程序在运行时运行良好,但我想在Designer中删除这些警告。
<phone:Pivot Title="APP TITLE" ItemsSource="{Binding MenuItemViewModels}">
<phone:Pivot.ItemTemplate>
<DataTemplate>
<!-- Inside this DataTemplate the designer knows that the DataContext is of type "MenuItemViewModel". The property "Text" is known and there are no warnings. Yeeha. -->
<TextBlock Text="{Binding Text}" />
</DataTemplate>
</phone:Pivot.ItemTemplate>
<phone:Pivot.HeaderTemplate>
<DataTemplate>
<!-- Inside this DataTemplate it seems that the designer does not know about any DataContext. Therefore property "Title" is not known and the designer shows a warning. -->
<TextBlock Text="{Binding Title}" />
</DataTemplate>
</phone:Pivot.HeaderTemplate>
</phone:Pivot>
编辑: 当我启动应用程序时,Text和Title都正确显示 - 我在CodeBehind中创建了三个ViewModel,因此UI上有三个Pivots,每个都有Text(作为Pivot Content)和Title(作为Pivot Header)正确显示。所以在运行时,框架知道它必须使用我的ViewModel-Collection作为DataContext而不是在DesignTime中?