WPF, ListView -> Row 3.Value = Row1.Foo + Row2Foo - PullRequest
0 голосов
/ 10 февраля 2012

Я пытаюсь создать новую строку в моем списке просмотра.

Эта строка всегда будет последним элементом и является суммой полей в верхних строках.

Дляпример:

<ListView ItemsSource={Binding}> 
<ListView.View> 
  <GridView> 
      <GridViewColumn Header="Column1" DisplayMemberBinding="{Binding Path=VarX}"/>
      <GridViewColumn Header="Column2" DisplayMemberBinding="{Binding Path=VarY}"/>
  </GridView>
</ListView.View>
</ListView> 

Теперь мне нужно отобразить новую строку, в которой в первом столбце отображается строка типа «Сумма:», а во втором столбце сумма значений VarX и VarY..

Спасибо и извините, если это не очень хорошо объяснено

1 Ответ

0 голосов
/ 10 февраля 2012

Есть несколько способов, которыми вы можете достичь этого, и хотя ни один из них не является хорошим способом сделать это технически, они должны держать вас в движении.Я собираюсь предположить, что вы знакомы с парадигмой MVVM (если не просто искать «MVVM WPF»).

Без сетки Просмотр

Если вы счастливыотображать ваши данные в столбцах без необходимости использовать gridview.Например, вы можете просто использовать список и установить источник элементов в IEnumerable и предоставить список различных типизированных значений.Финал может быть вашей итоговой строкой.Просто предоставьте для каждого типа, и вы получите разные форматы строк.т.е.

return ((IEnumerable<object>)model.Pairs)
    .Concat(new SummaryRow(model.Pairs)); 

И XAML

<ListBox Grid.IsSharedSizeScope ItemsSource={Binding}>
    <ListBox.Resources>
        <DataTemplate DataType="{x:Type IntPair}">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="XColumn"/>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="YColumn"/>
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding VarX}">
                <TextBlock Grid.Column="1" Text="{Binding VarY}">
            </Grid>
        </DataTemplate>
        <DataTemplate DataType="{x:Type SummaryRow}">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="XColumn"/>
                    <ColumnDefinition Width="Auto" SharedSizeGroup="YColumn"/>
                </Grid.ColumnDefinitions>
                <TextBlock Text="The sum is:">
                <TextBlock Grid.Column="1" Text="{Binding Total}">
            </Grid>
        </DataTemplate>
    </ListBox.Resources>
</ListBox>

с GridView

В качестве альтернативы просто используйте ViewModel для предоставления IEnumerable.Таким образом, ваша модель может иметь IEnumerable, и вы можете сделать что-нибудь простое, например

return (from x in model.Pairs
    select new ConvertedResults 
    { 
        VarX = x.IntX.ToString(), 
        VarY = x.IntY.ToString() 
    })
    .Concat(new [] { new ConvertedResults 
    { 
        VarX = "The sum is:",
        VarY = (from y in model.Pairs select x.VarX).Sum().ToString()
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...