Добавить столбец с фиксированными значениями в GridView ListView - PullRequest
2 голосов
/ 28 июня 2011

Я привязал ListView к списку (Of List (Of Integer)). Я могу указать столбцы таким образом:

<ListView ItemsSource="{Binding ResultsByDenomination}">
<ListView.View>
    <GridView>
        <GridViewColumn Header="      "/>
        <GridViewColumn Header="Noord" DisplayMemberBinding="{Binding [0]}"/>
        <GridViewColumn Header="Oost" DisplayMemberBinding="{Binding [1]}"/>
        <GridViewColumn Header="Zuid" DisplayMemberBinding="{Binding [2]}"/>
        <GridViewColumn Header="West" DisplayMemberBinding="{Binding [3]}"/>
    </GridView>
</ListView.View>

Это аккуратно размещает ListOfList в квадратной сетке. Однако я хочу заполнить первый столбец фиксированными значениями. Как мне это сделать, кроме перестройки Integer ListOfListOf в строку ListOfList Of и добавления туда первого столбца с фиксированными значениями?

РЕДАКТИРОВАТЬ: В основном я хочу добавить RowHeaders.

1 Ответ

1 голос
/ 28 июня 2011

Если у вас есть одна структура данных для заголовков строк и другая структура для данных строк, просто преобразуйте данные в новую структуру данных, которая будет легко потребляться ListView путем их объединения.Поскольку вам, похоже, нравятся структуры данных типа «гайки и болты», вы можете использовать для этого List<Tuple<string, List<int>>>.

Вот простой пример.Сначала выделите код для имитации вашего свойства ResultsByDenomination:

void Window_Loaded(object sender, RoutedEventArgs e)
{
    var rowHeaders = new List<string> { "One", "Two" };
    var rowData = new List<List<int>>
    {
        new List<int> { 1, 2, 3, 4 },
        new List<int> { 5, 6, 7, 8 },
    };
    var listViewData = rowHeaders.Zip(rowData, (a, b) => Tuple.Create(a, b)).ToList();
    DataContext = listViewData;
}

и модифицированный XAML для поддержки новой структуры данных:

<ListView ItemsSource="{Binding}">
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding Item1}"/>
            <GridViewColumn Header="Noord" DisplayMemberBinding="{Binding Item2[0]}"/>
            <GridViewColumn Header="Oost" DisplayMemberBinding="{Binding Item2[1]}"/>
            <GridViewColumn Header="Zuid" DisplayMemberBinding="{Binding Item2[2]}"/>
            <GridViewColumn Header="West" DisplayMemberBinding="{Binding Item2[3]}"/>
        </GridView>
    </ListView.View>
</ListView>

Вместо этого вы также можете создать служебный класс.использования Tuple с более описательными именами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...