【问题标题】:Windows Phone 8 Panorama Binding Bug?Windows Phone 8 全景绑定错误?
【发布时间】:2014-04-18 13:46:51
【问题描述】:

我在 Windows Phone 8 上遇到了全景控制问题。 使用基于 WP Panorama Project 模板的简单代码创建了一个项目来测试问题。 所以我使用 INotifyPropertyChanged 接口 (MVVM) 绑定到 Observable Collection。

<phone:PhoneApplicationPage

<!  ...  >

<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">

     <!--Panorama control-->
    <phone:Panorama ItemsSource="{Binding PageTitles}"
                    Title="Panorama Test">
        <phone:Panorama.HeaderTemplate>
            <DataTemplate>
                <Grid Width="410" Margin="-2,0,0,0">
                    <TextBlock d:DataContext="{Binding}" Text="{Binding Title}" HorizontalAlignment="Left" Style="{StaticResource PanoramaItemHeaderTextStyle}" />
                </Grid>
            </DataTemplate>
        </phone:Panorama.HeaderTemplate>
        <phone:Panorama.Background>
            <ImageBrush ImageSource="/Assets\PanoramaBackground.png"/>
        </phone:Panorama.Background>

        <phone:PanoramaItem Name="Screen1">
            <Grid Margin="0,-6,0,12">
                <Border BorderThickness="1" Width="420" Height="500" BorderBrush="#FFFFC700" Background="#FFFFC700"/>
            </Grid>
        </phone:PanoramaItem>            
        <phone:PanoramaItem Name="Screen2">
            <Grid Margin="0,-6,0,12">
                <Border BorderThickness="1" Width="420" Height="500" BorderBrush="#FFFFC700" Background="#FFFFC700"/>
            </Grid>
        </phone:PanoramaItem>            
        <phone:PanoramaItem Name="Screen3">
            <Grid Margin="0,-6,0,12">
                <Border BorderThickness="1" Width="420" Height="500" BorderBrush="#FFFFC700" Background="#FFFFC700"/>
            </Grid>
        </phone:PanoramaItem>
        <phone:PanoramaItem Name="Screen4" >
            <Grid Margin="0,-6,0,12">
                <Border BorderThickness="1" Width="420" Height="500" BorderBrush="#FFFFC700" Background="#FFFFC700"/>
            </Grid>
        </phone:PanoramaItem>
    </phone:Panorama>
</Grid>

在 Visual Studio 2013 设计视图中,我看到的页面内容是一行,内容如下:

_.di28.Induction.Viewmodels.ItemViewModel

在模拟器中运行时会显示:

Induction.Viewmodels.ItemViewModel

我已经以我能想到和找到的所有方式重新构建了 Binding,但问题仍然存在。 这是 Windows Phone 8 下全景控件的错误吗?

【问题讨论】:

    标签: mvvm windows-phone-8 binding


    【解决方案1】:

    不确定它是否能解决您的问题,但您误解了一些东西: ItemsSource 属性不仅适用于标题,而且适用于整个 PanoramaItems 集合。 之后您不应重新定义每个 PanoramaItem,而是使用数据模板:就像 HeaderTemplate 一样:

    <Grid x:Name="LayoutRoot" Background="Transparent">
    
     <!--Panorama control-->
    <phone:Panorama ItemsSource="{Binding PageTitles}"
                    Title="Panorama Test">
        <phone:Panorama.HeaderTemplate>
            <DataTemplate>
                <Grid Width="410" Margin="-2,0,0,0">
                    <TextBlock d:DataContext="{Binding}" Text="{Binding Title}" HorizontalAlignment="Left" Style="{StaticResource PanoramaItemHeaderTextStyle}" />
                </Grid>
            </DataTemplate>
        </phone:Panorama.HeaderTemplate>
        <phone:Panorama.Background>
            <ImageBrush ImageSource="/Assets\PanoramaBackground.png"/>
        </phone:Panorama.Background>
        <phone:Panorama.ItemTemplate>
            <DataTemplate>
                <phone:PanoramaItem>
                    <Grid Margin="0,-6,0,12">
                        <Border BorderThickness="1" Width="420" Height="500" BorderBrush="#FFFFC700" Background="#FFFFC700"/>
                    </Grid>
                </phone:PanoramaItem>   
            </DataTemplate>
        </phone:Panorama.ItemTemplate>
    </phone:Panorama>
    

    我现在无法测试,但至少你明白了。希望这会有所帮助!

    【讨论】:

    • 感谢您的回复...我试过了,它只是部分工作,因为代码在模拟器中运行,但会导致 Visual Studio 2013 设计屏幕因 NullReferenceException 而崩溃。无论如何,如果我希望每个 PanoramaItem 有不同的内容怎么办?
    • 有两个选项:如果您确切知道要显示的内容,那么您不应该使用模板方法,而只需定义每个 PanoramaItem,包括它们在 xaml 中的标题。相反,如果您希望能够动态添加 PanoramaItems,您应该将 PageTitle 变成一个更大的对象,该对象不仅包含 PanoramaItem Header,还包含其他属性,例如它的背景、内容等......为什么您尝试绑定 Panorama ItemsSource 而不是直接在 xaml 中定义每个 PanoramaItem ?
    • 是的,我想使用单个 MVVM 数据源来填充 PanoramaItem 标题(标题),并将 LongListSelector 的相同数据用作放置在全景图最右侧页面的菜单。 LongListSelector 项将使用来自 DataTemplate 中 MVVM 数据源的图像文件名
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2013-12-30
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多