wpf автопрокрутка данных - PullRequest
       13

wpf автопрокрутка данных

0 голосов
/ 02 декабря 2011

Я хотел бы настроить сетку данных таким образом, чтобы при добавлении элемента в его источник элементов сетка данных прокручивалась вниз, чтобы показать последний элемент.

Сетка данных находится внутри таблицы данных, поэтому я не могу установить X: name свойство и доступ к нему напрямую из кода.

Я имею в виду, что нужно использовать событие сетки данных, которое запускается при добавлении строки и имеет саму прокрутку сетки.

Вот некоторыекод psuedo, который описывает, как я настраиваю вещи:


UI.XAML exerpt

<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 exerpt

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

Parent.CS

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

Сетка данных не редактируется.

Если вам интересно, я прочитал пост "Как выполнить автопрокрутку на сетке данных WPF«код в этом посте работал бы для меня, если бы я мог найти событие, которое срабатывает всякий раз, когда элемент добавляется в источник данных сетки данных.

Любые идеи?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2011

вы можете получить доступ к DataGrid, даже если он находится в DataTemplate, выполнив «поиск» в визуальном дереве: VisualTreeHelper.GetChildCount // VisualTreeHelper.GetChild, затем снова протестируйте тип, пока не найдете свою сетку. И вы можете искать с такими же методами ScrollBar, а затем вы можете перехватить обработчик событий и использовать логику с выделенным кодом.

0 голосов
/ 02 декабря 2011

Объедините идею автоматической прокрутки с идеей этого вопроса или этого потока MSDN : вместо прослушивания события вашей сетки для обнаружения добавления строк, прослушивайте события из ItemsSource.

Редактировать: Поскольку вам не нравится это предложение, вы можете попробовать подключить LoadingRow, но я сильно подозреваю, что для работы потребуется EnableRowVirtualization = false (я не пробовал). Если ваша коллекция становится большой, отключение виртуализации строк открывает возможность серьезного падения производительности.

...