Отображение массива строк определенным образом - PullRequest
1 голос
/ 27 февраля 2011

У меня есть string[] в WPF, это список художников. Я хочу отобразить их следующим образом: Artist A, Artist B, Artist C (это 3 элемента в массиве). Каждый из пунктов должен быть кликабельным, и я должен быть в состоянии воздействовать на клики. Это представление должно быть помещено в ListView песен, использующих GridView (это уже работает, но в настоящее время оно отображает только System.String[] в ячейках художников).

Когда пользователь нажимает на исполнителя, мне нужно знать, по какому индексу песни и по какому индексу исполнителя был нажат (или какой индекс песни и какого исполнителя (строка)), тогда я могу просто использовать IndexOf(), чтобы найти художник-индекс). Кроме того, я не хочу, чтобы полосы прокрутки отображались в ячейке, поэтому, если массив слишком длинный, содержимое должно быть обрезано.

Как бы я сделал что-то подобное?

[Изменить]

То, что у меня пока есть, это:

<ListView x:Name="SpotifySongs" Grid.Row="3" Grid.Column="1" BorderThickness="0" ItemContainerStyle="{StaticResource ResourceKey=TrackListRowStyle}"
          >
    <ListView.View>
        <GridView AllowsColumnReorder="False">
            <GridViewColumn Width="25" Header="">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <Image Source="{Binding Path=IsStarred, Converter={StaticResource ResourceKey=StarredConverter}}" Height="13" Width="13" Margin="0" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Width="150" Header="Track" DisplayMemberBinding="{Binding Path=Name}"></GridViewColumn>
            <GridViewColumn Width="150" Header="Artist">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <ListView ItemsSource="{Binding Path=Artists}" BorderThickness="0" ScrollViewer.CanContentScroll="False" Background="Transparent">
                            <ListView.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <StackPanel Orientation="Horizontal" CanHorizontallyScroll="False" CanVerticallyScroll="False" ClipToBounds="True"
                                                Background="Transparent">
                                    </StackPanel>
                                </ItemsPanelTemplate>
                            </ListView.ItemsPanel>
                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType=ListViewItem, AncestorLevel=2}}"
                                               Background="Transparent"
                                               Text="{Binding}"/>
                                </DataTemplate>
                            </ListView.ItemTemplate>
                        </ListView>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Width="50" Header="Time" DisplayMemberBinding="{Binding Path=Length}"></GridViewColumn>
            <GridViewColumn Width="150" Header="Album" DisplayMemberBinding="{Binding Path=Album}"></GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

Колонна Artist, изображающая художников. Есть 3 проблемы, первая - получить , между именами артистов, вторая - удалить полосы прокрутки и включить обрезку, если в пределах 150px отображается два исполнителя, и последняя (я полагаю, я решил, что один) - это щелчок.

Уведомления об обновлении не важны, так как я постоянно меняю источник, когда появляются новые данные (потому что обычно они все новые).

1 Ответ

1 голос
/ 27 февраля 2011

Я бы использовал объект List, поскольку источником данных ListView является ICollection или IList, которым не является String [].

    List<String> stringList = new List<string>();

    stringList.Add("Artist 1");
    stringList.Add("Artist 2");
    stringList.Add("Artist 3");
    stringList.Add("Artist 4");

    lsv.ItemsSource = stringList;

XAML

<ListView x:Name="lsv" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...