Как выбрать случайный номер представления в CollectionViewSource? - PullRequest
0 голосов
/ 06 ноября 2011

Я пишу приложение, которое читает данные из файла XML, и использую кнопки «предыдущий / следующий» для циклического просмотра каждой записи.Тем не менее, я хотел бы знать, как использовать кнопку для выбора случайной записи.Мои кнопки «Предыдущий / Следующий» выглядят следующим образом:

private void Next_Click(object sender, RoutedEventArgs e)
{
        var button = (Button)sender;
        var cvs = (CollectionViewSource)button.Tag;
        cvs.View.MoveCurrentToPrevious();

        if (cvs.View.IsCurrentBeforeFirst)
        {
            cvs.View.MoveCurrentToLast();
        }
}

private void Previous_Click(object sender, RoutedEventArgs e)
{
        var button = (Button)sender;
        var cvs = (CollectionViewSource)button.Tag;
        cvs.View.MoveCurrentToNext();

        if (cvs.View.IsCurrentAfterLast)
        {
            cvs.View.MoveCurrentToFirst();
        }
}

private void Random_Click(object sender, RoutedEventArgs e)
{

}

Я везде искал решение, включая документацию Microsoft (http://msdn.microsoft.com/en-us/library/system.random.aspx), но все еще в тупике. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2011

Это должно работать:

readonly Random _random = new Random();
private void Random_Click(object sender, RoutedEventArgs e)
{
    var button = (Button)sender;
    var cvs = (CollectionViewSource)button.Tag;
    var view = cvs.View as CollectionView;
    if (view != null)
    {
        cvs.View.MoveCurrentToPosition(_random.Next(0, view.Count));
    }
}

Все представления в классах WPF по умолчанию не только реализуют ICollectionView, но должны быть подклассами CollectionView, которыеимеет Count, который можно использовать.

0 голосов
/ 06 ноября 2011

System.Random - это то, что вам нужно для генерации случайного числа, но вам также необходимо выяснить, сколько всего записей в вашем CollectionView, чтобы получить диапазон для случайного числа ген.

Что-то в этом роде:

private void Random_Click(object sender, RoutedEventArgs e)
{
    var count = CollectionView.Count;
    var random = new System.Random();
    var index = random.next(0, count);
    CollectionViewSource.View.MoveCurrentToPosition(index);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...