【问题标题】:Two longlistselectors or two columns of different data binding within longlistselector. Possible?longlistselector 中的两个 longlistselector 或两列不同的数据绑定。可能的?
【发布时间】:2014-05-06 20:23:39
【问题描述】:

我想弄清楚如何在一页上有两列不同的绑定数据。左栏为声音,右栏为每个声音保存铃声任务。 我不能将两个长列表选择器放在一页上,它不会让我这样做。

使用样本,很容易看出如何将绑定数据用于声音。最棒的是您只需在绑定的项目中输入新代码,它就会自动用新的声音块填充每个页面。

我想添加一个基本上以相同方式工作的保存铃声图块。但是,只有当我可以在同一页面上的声音磁贴旁边获得保存铃声磁贴时,它才有意义。

有没有办法做到这一点?我认为,我真正需要知道的是如何将两列不同的数据绑定放到同一个页面上,希望在 longlistselector 中这样它会滚动。

这是我现在使用的代码示例。


<phone:PhoneApplicationPage.Resources>    
    <DataTemplate x:Key="SoundTileDataTemplate">
    <Grid Background="{StaticResource PhoneAccentBrush}"
        Margin="0,0,135,0">
        <Grid VerticalAlignment="Top"
            HorizontalAlignment="right"
            Width="40"
            Height="40"
            Margin="0, 6, 6, 0">
            <Ellipse Stroke="{StaticResource PhoneForegroundBrush}"
                StrokeThickness="3"/>
            <Image Source="/Assets/AppBar/Play.png" />
        </Grid>
        <StackPanel VerticalAlignment="bottom">
            <TextBlock Text="{Binding Title}" 
                Margin="6,0,0,6"/>
        </StackPanel>
    </Grid>
    </DataTemplate>
</phone:PhoneApplicationPage.Resources>

<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
    <!--Pivot Control-->
    <phone:Pivot Title="{Binding Path=LocalizedResources.ApplicationTitle, 
        Source={StaticResource LocalizedStrings}}">
        <!--Pivot item one-->
        <phone:PivotItem Header="{Binding Animals.Title}">
            <!--Double line list with text wrapping-->
            <phone:LongListSelector Margin="0,0,-12,0" 
                ItemsSource="{Binding Animals.Items}"
                LayoutMode="List"
                ItemTemplate="{StaticResource SoundTileDataTemplate}"
                SelectionChanged="LongListSelector_SelectionChanged">
           </phone:LongListSelector>
        </phone:PivotItem>
    </phone:Pivot>
</Grid>

【问题讨论】:

  • 好的,我通过简单地使用 Grid 并在其中放置两个 longlistselector 找到了解决方案的一部分。现在问题出在 saveringtonetask 上。应用程序现在的方式是,视图模型和绑定用于使用播放声音的图块填充长列表选择器。我还没有找到一种方法来使用充当 saveringtonetask 功能而不是播放声音的图块填充其他 longlistselector。有什么想法吗?
  • 我对为什么需要两个 LLS 感到困惑。您能否解释一下第二个 LLS 的用途。我可以看到第一个是显示有关声音的信息,但第二个?

标签: c# xaml windows-phone-8 data-binding longlistselector


【解决方案1】:

简单的解决方案。

     <DataTemplate x:Key="NewItemTemplate">
        <StackPanel HorizontalAlignment="Left" Orientation="Horizontal" >
            <StackPanel Orientation="Horizontal" Width="56">
                <CheckBox x:Name="CheckBox1" HorizontalAlignment="Left" IsChecked="{Binding Checked, Mode=TwoWay}" BorderBrush="Black" Style="{StaticResource CheckBoxStyleGrey1}" Width="90" Height="74" />
            </StackPanel>
            <StackPanel Orientation="Horizontal" RenderTransformOrigin="0.5,0.5" Width="803" >
                <StackPanel.RenderTransform>
                    <CompositeTransform ScaleX="-1"/>
                </StackPanel.RenderTransform>
                <TextBlock Text="{Binding lItem}" Foreground="Black" FontSize="45" Margin="-176,0,0,0" RenderTransformOrigin="0.5,0.5">
                    <TextBlock.RenderTransform>
                        <CompositeTransform ScaleX="-1"/>
                    </TextBlock.RenderTransform>
                </TextBlock>
                <TextBlock Text="{Binding lCategory}" Foreground="Black" Margin="-146,0,-2,0" RenderTransformOrigin="0.5,0.5" >
                    <TextBlock.RenderTransform>
                        <CompositeTransform ScaleX="-1"/>
                    </TextBlock.RenderTransform>
                </TextBlock>
            </StackPanel>

        </StackPanel>
    </DataTemplate>

根据您的需要编辑 ItemTemplate,如果出现错误,您可能必须在混合中使用它。在 Blend 中,转到您的长列表选择器并编辑项目模板。

【讨论】:

    【解决方案2】:

    首先,通过将 2 个长列表选择器彼此相邻添加,您从一个非常错误的角度来解决这个问题。这对用户不利,对用户体验不利,对 UI 设计不利,对独角兽不利。

    您正在尝试将另一个 LongListSelector 中的功能(保存铃声)与另一个 Long List Selector 中的相应项目相关联。是什么让您认为添加另一个长列表选择器并使用许多保存铃声按钮填充它可以解决您的问题?稍等一下,假设您以某种方式实现了将两个长列表选择器彼此相邻添加,并将您的项目部署在左侧选择器上,并在右侧保存铃声按钮。您打算如何在滚动时正确关联它们?用户将滚动左侧,右侧长列表选择器将保持静止。

    您不应该在前面添加一个长列表选择器。相反,您应该在一个长列表选择器中修改您的 ItemTemplate。然后,您将能够为一个 LongListSelector 项拥有多个磁贴、按钮、文本或任何您需要的内容。

    ItemTemplate="{StaticResource SoundTileDataTemplate}"
    

    我不会提交为一个 LongListSelector 项添加多个按钮/图块/文本并关联它们的通信/功能的解决方案。因为互联网上已经有大约 500 万个关于此的示例。

    我强烈建议您阅读Design Guidelines for Windows Phone。因为你有这样的想法会导致商店里又多了一个蹩脚的应用程序。人们真的受够了蹩脚的应用程序。所以请要么完全停止为 Windows Phone 开发应用程序,要么暂停你现在正在做的任何事情,然后去阅读设计原则。

    【讨论】:

    • 我试图走这条路的原因是它比在 xaml 页面中添加按钮要容易得多,然后是每个按钮的播放音频和保存铃声任务。使用这条路线,我至少只需向 viewdata 模型添加新声音,Tiles 就会自动创建。我还没有找到一种方法来为任务执行此操作,例如 saveringtonetask。在一个页面的想法上放弃两个长列表选择器我没有问题。如果有办法使用像 saveringtone 这样的事件处理程序设置视图模型,它会自动创建磁贴/按钮,我肯定找不到任何方法来做到这一点。
    • 另一种方法怎么样。是否可以将保存到上下文菜单的 SaveasRingtoneTask 添加到这些 Tiles 中的每一个,并且可以将其添加到创建 Tiles 及其功能以播放声音的现有视图模型中?我意识到我很讨厌这个。我正在努力学习并变得更好。
    • 您首先应该了解整个 MVVM 是如何工作的。我不想在这里变得粗鲁,但你对这样的 cmets 听起来很困惑和绝望。请不要尝试通过尝试/查看方式来实现此类目标。而是去消耗一些关于 MVVM、设计原则等的资源。稍后查看我的开源 WP8 应用程序,了解 LongListSelector 等中的“事件处理程序”绑定(实际上是命令模式)是如何发生的。 link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多