3

親/マスターコントロールとしてtelerikRadGridViewがある画面があります。次に、選択したアイテムの詳細を表示する子ユーザーコントロールがあります。

私のグリッドは次のように設定されています。

<telerik:RadGridView  
 AutoGenerateColumns="False"  
 CanUserFreezeColumns="False" IsReadOnly="True"
 RowIndicatorVisibility="Collapsed" 
 ItemsSource="{Binding LinkedCases}" 
 SelectionUnit="FullRow" SelectionMode="Single"
 IsBusy="{Binding LinkedCasesLoading}" 
 ShowColumnFooters="True" 
 SelectedItem="{Binding CurrentlySelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >

CurrentSelectedItemは、ビューモデルのプロパティです。正しく機能しており、詳細コントロールに正しく入力されています。

この画面に移動してから戻ると、問題が発生します。

画面は最初から再作成されますが、私のビューモデルはビューモデルロケーターから取得されます(MVVM LightとSimpleIOCを使用)。ビューモデルは、まさに私が必要とする状態にあります。親グリッドは正しく入力され、子の詳細は正しく入力されます。ViewModelのCurrentlySelectedItemは入力されていますが、グリッドは選択された行を強調表示していません。

UpdatesourcetriggerとIsSynchronisedWithCurrentItemを使用して、または使用せずに試しましたが、これらにより、グリッドの最初の行が選択されて強調表示されます。したがって、CurrentlySelectedItemの以前の値が上書きされますが、これは私が求めているものではありません。

誰かがこれを達成する方法について何かアイデアを持っていますか?

4

1 に答える 1

4

ロードされたページまたは移動先のページでグリッドへの参照を取得できませんでした-CaseGridViewという名前を付けましたが、RadGridViewであると認識されましたが、nullが返されました。この時点ではコントロールが作成されていないと想定したので、コントロールに名前を付け、それを使用してコントロールイベントでコントロールを参照しようとしましたが、これも失敗していました。

送信者を使用した場合、DataLoadedイベントで機能することがわかりました。

 private void CaseGridView_DataLoaded(object sender, EventArgs e)
    {
        var grid = sender as RadGridView;
        if (grid != null)
        {
            grid.SelectedItem = vm.CurrentlySelectedItem;
            if (grid.SelectedItem != null)
            {
                grid.ScrollIntoView(grid.SelectedItem);
            }
        }
    }

また、scrollIntoViewパーツを追加して、画面に確実に表示されるようにしました。

于 2012-09-05T09:43:03.620 に答える