0

私はMVVMを使用しています。いくつかのコードを使用して、データグリッドをコレクションにバインドします。

<commonMVVMControls:GridControl DataContext="{Binding Path=ClientsListGrid,
                                                          Mode=TwoWay}"

それは DataGridControl クラスです:

public class GridControl : DataGrid
{
    public GridControl()
    {
        this.DataContextChanged += new System.Windows.DependencyPropertyChangedEventHandler(GridControl_DataContextChanged);
    }

    void GridControl_DataContextChanged(object sender, System.Windows.DependencyPropertyChangedEventArgs e)
    {
        var bindingItemsSource = new Binding("ItemsSource");
        bindingItemsSource.Source = this.DataContext;
        this.SetBinding(DataGrid.ItemsSourceProperty, bindingItemsSource);

        this.RowStyle = new Style(typeof(DataGridRow));
        this.RowStyle.Setters.Add(new Setter(DataGridRow.IsSelectedProperty, new Binding("IsSelected")));
    }

ViewModel のコード スニペット:

var selectedClient = this.ClientsListGrid.ItemsSource.Where(x => x.IsSelected);
        if (!selectedClient.Any()) 
        {
            MessageBox.Show(Resource.Resource.UpdateUserError, Resource.Resource.Warning, MessageBoxButton.OK, MessageBoxImage.Stop,
            MessageBoxResult.OK);
            return;
        }

        var viewModel = new AddOrUpdateClientViewModel(_serviceContext, selectedClient.First()); 

それはうまくいきます。しかし、データグリッドを上下にスクロールすると、動作が停止し、IsSelected は常に false になります。

4

1 に答える 1

0

仮想化を無効にするとどうなるか試してみてください。それと何か関係があるのか​​もしれません。

于 2012-09-15T17:18:49.717 に答える