Два селектора длинного списка или два столбца с разными привязками данных в селекторе длинного списка. Возможный?

Я пытаюсь понять, как иметь два столбца разных связанных данных на одной странице. Левая колонка для звуков, правая для задачи сохранения мелодии звонка для каждого звука. Я не могу разместить два селектора лонглистов на одной странице, мне это не позволит.

Используя образец, легко увидеть, как использовать связанные данные для звука. И самое замечательное то, что вам нужно всего лишь ввести новый код в привязанные элементы, и он автоматически заполнит каждую страницу новыми звуковыми фрагментами.

Я хотел бы добавить плитку сохранения мелодии звонка, которая, по сути, работала бы так же. Но это имело бы смысл только в том случае, если бы я мог получить плитки сохранения мелодии звонка рядом со звуковыми плитками на той же странице.

Есть какой-либо способ сделать это? Все, что мне действительно нужно знать, я думаю, это как получить два столбца с разными привязками данных на одной странице, надеюсь, в селекторе длинного списка, чтобы он прокручивался.

Вот пример кода, который я сейчас использую.


<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>

person user3568429    schedule 06.05.2014    source источник
comment
Хорошо, я нашел ЧАСТЬ решения, просто используя сетку и помещая внутрь два селектора длинного списка. Теперь проблема с задачей сохранения рингтона. В том виде, в котором сейчас приложение, модель представления и привязка используются для заполнения селекторов длинного списка плитками, которые воспроизводят звуки. Я не нашел способа заполнить другой селектор длинного списка плитками, которые действуют как функция сохранения мелодии, а не воспроизводят звук. Любые идеи?   -  person user3568429    schedule 07.05.2014
comment
Я смущен тем, почему вам нужны два LLS. Не могли бы вы объяснить, для чего нужен второй LLS. Я вижу, что первое - это отображение информации о звуке, а второе?   -  person Shawn Kendrot    schedule 09.06.2014


Ответы (2)


Простое решение.

     <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, если возникнет ошибка. В Blend перейдите к селектору длинного списка и отредактируйте шаблон элемента.

person Jay    schedule 22.06.2014

Прежде всего, стремясь добавить 2 селектора длинного списка рядом друг с другом, вы подходите к этой проблеме с очень неправильной точки зрения. Это плохо для пользователя, плохо для UX, плохо для дизайна пользовательского интерфейса и плохо для единорогов.

Вы пытаетесь связать функцию (Сохранить мелодию звонка) в другом селекторе LongListSelector с соответствующим элементом в другом селекторе длинного списка. Что за земля заставила вас думать, что добавление еще одного селектора длинного списка и заполнение его множеством кнопок «Сохранить рингтон» решит вашу проблему? На секунду предположим, что вы каким-то образом добились добавления двух селекторов длинного списка рядом друг с другом и разместили свои элементы на левом селекторе, а кнопки сохранения мелодии справа. Как вы планируете правильно связать их при прокрутке? Пользователь будет прокручивать левый, а правый селектор длинного списка останется статичным.

Вы не должны добавлять еще один селектор длинного списка на передний план. Вместо этого вы должны пойти и изменить свой ItemTemplate в одном селекторе длинного списка. Тогда вы сможете иметь более одной плитки, кнопки, текста или чего-то еще, что вам нужно для одного элемента LongListSelector.

ItemTemplate="{StaticResource SoundTileDataTemplate}"

Я не собираюсь предлагать решение, чтобы добавить более одной кнопки/плитки/текста для одного элемента LongListSelector и связать их связь/функциональность. Потому что в интернете уже около 5 миллионов примеров по этому поводу.

Я настоятельно рекомендую вам прочитать Руководство по дизайну для Windows Phone. Потому что у вас есть такие идеи, которые выльются в еще одно дрянное приложение в Магазине. Люди действительно устали от дрянных приложений. Поэтому, пожалуйста, либо полностью прекратите разработку приложений для Windows Phone, либо сделайте перерыв в том, чем вы сейчас занимаетесь, и прочитайте принципы проектирования.

person halil    schedule 07.05.2014
comment
Причина, по которой я попытался пойти по этому пути, заключалась в том, что это было намного проще, чем добавление кнопок на страницу xaml, а затем задача воспроизведения звука и сохранения мелодии для каждой кнопки. Используя этот маршрут, мне, по крайней мере, нужно было только добавить новые звуки в модель данных представления, и плитки создавались бы автоматически. Я не нашел способа сделать это для задачи, такой как saveringtonetask. У меня нет проблем с тем, чтобы отказаться от идеи двух селекторов длинного списка на одной странице. Если есть способ настроить модель представления с помощью обработчика событий, такого как saveringtone, где он будет автоматически создавать плитку/кнопку, я точно не могу найти способ, как это сделать. - person user3568429; 07.05.2014
comment
Как насчет другого подхода. Можно ли добавить удержание в контекстное меню в SaveasRingtoneTask для каждой из этих плиток и можно ли добавить это в существующую модель просмотра, которая создает плитки и их функцию для воспроизведения звука? Я понимаю, что мне хреново в этом. Я пытаюсь учиться и становиться лучше. - person user3568429; 07.05.2014
comment
Сначала вы должны понять, как работает вся эта штука с MVVM. Я не хочу быть грубым, но ты кажешься таким растерянным и отчаянным здесь с такими комментариями. Пожалуйста, не пытайтесь достичь таких вещей путем пробы/видеть. Скорее идите и изучите некоторые ресурсы о MVVM, принципах проектирования и так далее. Позже проверьте мое приложение WP8 с открытым исходным кодом, чтобы увидеть, как привязка «обработчика событий» (на самом деле это шаблон команды) происходит в LongListSelector и так далее. ссылка - person halil; 07.05.2014