Отменить редактирование на датагрид MVVM? - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь отменить редактирование, когда bool возвращается как false. Значение bool устанавливается в false, как только я перебрал выбранные ячейки и провел некоторые вычисления. Это в функции CellEditEnding, но я использую интерактивность EventTrigger, так что это все MVVM, и у меня нет объекта datagrid, который фактически выполняет вызов CancelEdit, когда этот bool равен false.

Есть ли способ, которым яможно отменить редактирование с помощью MVVM? Когда я теряю фокус из клетки, она все еще белая ...

Вот как я обошел ее сейчас ... не нравится, хотя ...

В коде я делаю это ... Мне просто не нравится делать это в модели представления ... вроде как разбивает MVVM

    public void CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
        bool isSuccess = true;

        if (e.EditAction == DataGridEditAction.Commit)
        {
            if (e.EditingElement is TextBox cellTextEdit && cellTextEdit.Text != string.Empty)
            {
                for (int iSelected = 0; iSelected < SelectedGridCellCollection.Count; ++iSelected)
                {
                     if (!isSuccess)
                     {
                         e.Cancel = true;

                          // Only "non" MVVM here, but if there is another way to do this then I'd
                         // be surprised...
                         DataGrid dg = sender as DataGrid;
                         dg.CancelEdit();
                      }
                 }
            }
       }
   }

В XAML

                                <DataGrid Name="dataGrid" Width="550" ItemsSource="{Binding ObjSource}" 
                                          CanUserSortColumns="False" CanUserAddRows="false" 
                                          HorizontalAlignment="Stretch" 
                                          VerticalScrollBarVisibility="Auto"
                                          utils:DataGridSelectedCellsBehavior.SelectedCells="{Binding SelectedGridCellCollection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                          AutoGenerateColumns="False" 
                                          Background="{StaticResource ResourceKey=Polour}"
                                          SelectionUnit="Cell" 
                                          RowHeaderWidth="0" 
                                          RowStyle="{StaticResource DataGridRowStyle}" 
                                          AlternationCount="2" 
                                          FontFamily="{StaticResource ResourceKey=Light}" 
                                          CanUserResizeColumns="False" CanUserReorderColumns="False">
                                    <DataGrid.Resources>
                                        <Style BasedOn="{StaticResource {x:Type DataGridColumnHeader}}" TargetType="{x:Type DataGridColumnHeader}">
                                            <Setter Property="Background" Value="{StaticResource ResourceKey=Polour}"/>
                                            <Setter Property="Foreground" Value="White"/>
                                            <Setter Property="BorderBrush" Value="{StaticResource ResourceKey=Solour}"/>
                                            <Setter Property="BorderThickness" Value="0,0,0,1"/>
                                            <Setter Property="HorizontalAlignment" Value="Center"/>
                                            <Setter Property="VerticalAlignment" Value="Center"/>
                                            <Setter Property="HorizontalContentAlignment" Value="Center"/>
                                            <Setter Property="VerticalContentAlignment" Value="Center"/>
                                            <Setter Property="Margin" Value="5 0 5 0"/>
                                            <Setter Property="Height" Value="30"/>
                                            <Setter Property="Width" Value="Auto"/>
                                        </Style>
                                    </DataGrid.Resources>
                                    <DataGrid.Columns>
                                        <DataGridTextColumn Header="ll" Binding="{Binding Id}" IsReadOnly="True"></DataGridTextColumn>
                                    </DataGrid.Columns>
                                    <i:Interaction.Triggers>
                                        <i:EventTrigger EventName="CellEditEnding">
                                            <i:CallMethodAction TargetObject="{Binding}" MethodName="CellEditEnding"/>
                                        </i:EventTrigger>
                                    </i:Interaction.Triggers>
                                </DataGrid>

1 Ответ

0 голосов
/ 30 сентября 2019

https://www.codeproject.com/Questions/487418/WPFplusDataGridplusProblempluswhenplushiddenplusan

Решение 2 решило мою проблему, если кто-то рассматривает редактирование Datagrids таким способом - хотя предложение BionicCode гораздо лучше для пользовательского опыта

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