5

データ グリッドの行をプログラムで表示したいと考えています。100行以上あります。行を作成するとき (観察可能なコレクションにアイテムを追加することによって行っています)、その新しい行を選択して表示したいと思います。コードで新しい行を選択できましたが、スクロールできませんでした。さらに、ユーザーがテキストを入力できるように、行の最初のセルを編集モードにする必要があります。私はアプリケーションの MVVM パターンに従っており、ビューにゼロ コードを保持したいと考えています。どうすればこれを達成できますか?

どんな助けや提案もいただければ幸いです....

アップデート:

これは私が XAML で行ったことです

<telerik:RadGridView ItemsSource="{Binding AllPartClasses}" 
                     SelectedItem="{Binding SelectedPartClassViewModel, Mode=TwoWay}"         
                     SelectionMode="Single" IsSynchronizedWithCurrentItem="True">

私のビューモデルで私はこれをしました

void AddNewPartClassExecute()
    {
        PartClass newPartClass = new PartClass();
        PartClassViewModel tempPartClass = new PartClassViewModel(newPartClass);
        tempPartClass.IsInValid = true;
        AllPartClasses.Add(tempPartClass);
        SelectedPartClassViewModel = tempPartClass;
        Global.DbContext.PartClasses.AddObject(newPartClass);

        //OnPropertyChanged("AllPartClasses");
    }
public PartClassViewModel SelectedPartClassViewModel 
    { 
        get
        {  
            return _selectedPartClassViewModel;
        }
        set
        {
            _selectedPartClassViewModel = value;
            OnPropertyChanged("SelectedPartClassViewModel");
        }
    }

私にはうまくいきませんでした。

4

2 に答える 2

9

通常の WPF のDataGrid場合は、ScrollIntoView. ビューで、SelectionChanged イベントをビューのコード ビハインド cs ファイルの次のように接続します。

private void OnSelectionChanged( object sender, SelectionChangedEventArgs e )
{
    Selector selector = sender as Selector;
    DataGrid dataGrid = selector as DataGrid;
    if ( dataGrid != null && selector.SelectedItem != null && dataGrid.SelectedIndex >= 0 )
    {
        dataGrid.ScrollIntoView( selector.SelectedItem );
    }
}
于 2014-10-29T19:30:23.083 に答える
0

MVVM パターンに従う場合、コードからのスクロールなどの UI 固有の操作を行うべきではありません。

解決策は簡単です - DataGrid.SelectedItemを ViewModel のプロパティにバインドし、アイテム コレクションに新しいアイテムを追加するときにバインドされたプロパティを更新するSelectedItemだけで、追加されたアイテムを参照し、データ グリッドが適切な行を自動的に選択する必要があります。

<DataGrid 
    ItemsSource="{Binding UnderyingItemsCollection}" 
    SelectedItem="{Binding RecentlyAddedItem, Mode=TwoWay}"
    IsSynchronizedWithCurrentItem="True">
于 2012-04-12T20:16:30.790 に答える