5

フレームワーク.NET 4.0を使用してWPFアプリケーションに取り組んでいます

DataGrid に問題があります。すべての行に 2 つのコマンドがあります。

public ICommand MoveUpOrderPipeCommand
{
     get
     {
         if (_moveUpOrderPipeCommand == null)
         {
              _moveUpOrderPipeCommand = new Command<OrderPipeListUIModel>(OnMoveUpOrderPipe, CanMoveUpOrderPipe);
         }
                return _moveUpOrderPipeCommand;
      }
}

private bool CanMoveUpOrderPipe(OrderPipeListUIModel orderPipe)
{
     if (OrderPipes == null || !OrderPipes.Any() || OrderPipes.First() == orderPipe)
          return false;
     return true;
}

また、MoveDown にも同じコマンドがあります (最後の行でないかどうかのチェックを実行できます)。

そして DataGrid :

<DataGrid Grid.Row="1" IsReadOnly="True" ItemsSource="{Binding OrderPipes}" SelectionMode="Extended">
   <DataGrid.Columns>
      <DataGridTextColumn Header="Diam. (mm)" Binding="{Binding Diameter}" Width="120">    </DataGridTextColumn>
      <DataGridTextColumn Header="Lg. (m)" Binding="{Binding Length}" Width="120"></DataGridTextColumn>
      <DataGridTextColumn Header="Ep. (mm)" Binding="{Binding Thickness}" Width="120"></DataGridTextColumn>
      <DataGridTextColumn Header="Ondulation" Binding="{Binding Ripple}" Width="120"></DataGridTextColumn>
      <DataGridTemplateColumn>
         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <StackPanel Orientation="Horizontal">
                  <Button Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.MoveUpOrderPipeCommand}" CommandParameter="{Binding}">
                  </Button>
               </StackPanel>
            </DataTemplate>
         </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
   </DataGrid.Columns>
</DataGrid>

EnableRowVirtualization を true にしてグリッドを仮想化すると、問題が発生します。一番下までスクロールすると (最初の行が表示されなくなります)、最初の行のボタンが上に移動することがあります (通常は上に移動できません)。 )DataGridをクリックするまで有効であり、2番目または3番目も無効になっているため、有効にする必要があります!

EnableRowVirtualization を false に設定すると、この問題は発生しません...

この問題について話しているインターネット上の投稿を 1 つだけ見つけましたが、.net フレームワークの dataGrid はありません: http://www.infragistics.com/community/forums/t/15189.aspx

どうすれば修正できますか?

前もって感謝します

編集:コマンドクラス

public class Command<T> : ICommand
{
    private readonly Action<T> _execute;
    private readonly Func<T, bool> _canExecute;

    public Command(Action<T> execute) : this(execute, null)
    {
    }

    public Command(Action<T> execute, Func<T, bool> canExecute)
    {
       if (execute == null)
          throw new ArgumentNullException("execute", "Le délégué execute ne peut pas être nul");

       this._execute = execute;
       this._canExecute = canExecute;
    }

    public event EventHandler CanExecuteChanged
    {
       add
       {
          CommandManager.RequerySuggested += value;
       }
       remove
       {
          CommandManager.RequerySuggested -= value;
       }
    }

    public bool CanExecute(object parameter)
    {
       return (_canExecute == null) ? true : _canExecute((T)parameter);
    }

    public void Execute(object parameter)
    {
       _execute((T)parameter);
    }
 }
4

1 に答える 1