0

アイテムがアイテムソースに追加されるたびに、データグリッドが下にスクロールして最後のアイテムが表示されるように、データグリッドを設定したいと思います。

データグリッドはデータ テンプレート内にあるため、X:name プロパティを設定してコード ビハインドから直接アクセスすることはできません。

私が念頭に置いているのは、行が追加されたときに発生し、グリッド自体がスクロールする datagrid イベントを使用することです。

これは、私がどのようにセットアップしたかを概説するいくつかの疑似コードです。


UI.XAML 抜粋

<TabControl ItemsSource="{Binding Parents}" x:Name="ProductsTab">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Key}"/>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <DataGrid Margin="5" ItemsSource="{Binding Value.Children}">
                <DataGrid.Columns>
                    <Column Column definitions removed for your sanity/>
                </DataGrid.Columns>
            </DataGrid>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

UI.XAML.CS 抜粋

public class UI
{
    //Thanks to Dr. WPF for the ObservableDictionary class
    public ObservableDictionary<string, Parent> Parents {get; set;}
}

親.CS

public class parent
{
    public ObservableCollection<Child> Children {get; set;}
}

データグリッドは編集できません。

ご参考までに、「WPF データグリッドで自動スクロールする方法」という投稿を読みましたが、アイテムがデータグリッドのアイテムソースに追加されるたびに発生するイベントを見つけることができれば、その投稿のコードが機能します。

何か案は?

4

2 に答える 2

0

ビジュアル ツリーで「検索」を実行することにより、DataTemplate 内にある場合でも、DataGrid にアクセスできます。また、ScrollBar と同じ種類のメソッドを使用してシークし、イベント ハンドラーをフックしてコード ビハインド ロジックを使用できます。

于 2011-12-02T15:09:56.543 に答える
0

自動スクロールのアイデアを、この質問またはこの MSDN スレッドのアイデアと組み合わせます。行の追加を検出するためにグリッドのイベントをリッスンする代わりに、ItemsSource.

編集:その提案が気に入らないので、フックを試すことができますが、これが機能するためにLoadingRow必要になると強くEnableRowVirtualization = false思います(私は試していません)。コレクションが大きくなった場合、行の仮想化をオフにすると、パフォーマンスが大幅に低下する可能性が生じます。

于 2011-12-01T21:54:17.040 に答える