Редактируемый ListView в WPF - CodeHelper

Редактируемый ListView в WPF

1

Можно ли сделать редактируемым список, построенный на котроле ListView/GridView?

Новые ответы


2

Если изучить все существующие способы реализации редактируемости ячеек ListView, то складывается впечатление, что все такие решения больше похожи на «хаки» и не совсем укладываются в саму парадигму WPF. Так что, возможно, лучше отказаться от использования in-place редактора в этом случае. В качестве альтернативы можно предложить редактирование в отдельной панели или в модальном окне.

1

Вот статья на MSDN, описывающая как создать ListView в GridView, ячейки которого можно редактировать.

Смысл в следующем. Создается custom control, который впоследствии используется в качестве CellTemplate для столбца таблицы.

admax

Как-то это все не тривиально на первый взгляд. Мне кажется или в статье не полностью рабочий код приводится?

admax

Похоже рабочий пример этого кода выложен на странице ListView with Editing Capability Sample. Вот прямая ссылка на архив с исходниками. Однако, попробовав запустить это приложение, можно увидеть, что редактирование работает не совсем правильно...

0

Посмотри вот это к примеру:

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Xml Data Binding" FontSize="20"
    >
  <StackPanel Orientation="Horizontal">
    <StackPanel.Resources>
      <Style x:Key="{x:Type ListBoxItem}" TargetType="{x:Type ListBoxItem}">
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
              <Grid>
                <ContentPresenter />
                <TextBox Name="EditableText" Visibility="Collapsed"/>
              </Grid>
              <ControlTemplate.Triggers>
                <Trigger Property="IsSelected" Value="true">
                  <Setter TargetName="EditableText" Property="Visibility" Value="Visible" />
                  <Setter TargetName="EditableText" Property="Text" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}"/>
                </Trigger>
              </ControlTemplate.Triggers>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
    </StackPanel.Resources>
    <ListBox Width="100" Height="155">
      <ListBoxItem>Item 1</ListBoxItem>
      <ListBoxItem>Item 2</ListBoxItem>
      <ListBoxItem>Item 3</ListBoxItem>
    </ListBox>
    <ListBox Width="100" Height="155">
      <ListBoxItem>Item 1</ListBoxItem>
      <ListBoxItem>Item 2</ListBoxItem>
      <ListBoxItem>Item 3</ListBoxItem>
    </ListBox>
  </StackPanel>
</Page>
admax

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


v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.