Поведение пользовательских кликов в сетке данных - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть таблица данных, отображающая содержимое пользовательского типа данных.

<DataGrid Name="TestGrid" ItemsSource="{Binding Source={StaticResource Data}}" AutoGenerateColumns="False">
  <DataGrid.Columns>
    <DataGridTextColumn Header="Value 1" Binding="{Binding Value1, StringFormat={}{0:C}}"/>
    <DataGridTextColumn Header="Value 2" Binding="{Binding Value2, StringFormat={}{0:#.00}}"/>
  </DataGrid.Columns>

Я хочу связать различные команды с событиями MouseLeftButtonDown и MouseRightButtonDown для каждого DataGridTextColumn. Я могу использовать CellEditingTemplate объекта DataGridTemplateColumn, чтобы выполнить некоторую настройку ввода, но не смог выяснить, как получить желаемое поведение.

Редактировать: я стремлюсь к тому, чтобы левый клик увеличивал значение, а правый клик уменьшал его, размер +/- изменялся бы от столбца к столбцу.

Редактировать 2: Кажется, что вы можете изменять стили на основе событий мыши, используя триггеры, но, похоже, это не работает для изменения самих данных. Я склоняюсь к тому, чтобы отказаться от сетки данных и использовать ListView

1 Ответ

3 голосов
/ 12 декабря 2011

Вот мои мысли на эту тему:

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

  2. Если вы хотите продолжить работу с dataGrid, самый простой способ сделать это - использовать TextBoxColumn.CellStyle и добавить туда прослушиватель событий. Если вы сделаете это, вам нужно будет обновить значение ViewModel в вашем обработчике.

Попробуйте что-нибудь наподобие:

<DataGrid Name="TestGrid" ItemsSource="{Binding Source={StaticResource Data}}" AutoGenerateColumns="False">
     <DataGrid.Columns>
          <DataGridTextColumn Header="Value 1" Binding="{Binding Value1, StringFormat={}{0:C}}">
              <DataGridTextColumn.CellStyle>
                   <Style TargetType="DataGridCell">
                        <EventSetter Event="MouseLeftButtonDown" Handler="MyMouseLeftButtonDownHandler" />
                        <EventSetter Event="MouseRightButtonDown" Handler="MyMouseRightButtonDownHandler" />
                    </Style>
               </DataGridTextColumn.CellStyle>
          </DataGridTextColumn>
          <DataGridTextColumn Header="Value 2" Binding="{Binding Value2, StringFormat={}{0:#.00}}">
              <DataGridTextColumn.CellStyle>
                   <Style TargetType="DataGridCell">
                        <EventSetter Event="MouseLeftButtonDown" Handler="MyMouseLeftButtonDownHandler" />
                        <EventSetter Event="MouseRightButtonDown" Handler="MyMouseRightButtonDownHandler" />
                   </Style>
              </DataGridTextColumn.CellStyle>
          </DataGridTextColumn>
     </DataGrid.Columns>
</DataGrid>

или создайте свой собственный MyDataGridTextBoxColumn класс, который наследует исходный, и добавьте стиль к cellStyle столбца в определении xaml вашего столбца. (таким образом, у вас есть только одна общая часть кода)

тогда в обработчиках вы можете легко определить ячейку, в которой вы щелкнули, и соответственно увеличить или уменьшить viewModel.

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