Автоматическая прокрутка до новой добавленной строки в представлении данных MVVM light - PullRequest
0 голосов
/ 11 сентября 2011

* решено * Я наконец-то решил, что это «грязный» код в коде позади, хотя MVVM мог бы быть чище и приятнее Наблюдаемый материал коллекции все еще выполняется во ViewModel ...

    public ViewModelLocator VML = new ViewModel.ViewModelLocator();

    private void btnAdd_Click(object sender, RoutedEventArgs e)
    {

        VML.MainMatch.Add();
            dataGrid.SelectedIndex = VML.MainMatch.Matches.Count - 1;
           dataGrid.ScrollIntoView(VML.MainMatch.Matches, dataGrid.Columns[0]);
    }

У меня есть представление с сеткой данных и кнопкой, подключенной к команде relay для добавления записей в наблюдаемую коллекцию (источник данных сетки данных), отлично работает следующее:

Вид:

<Button x:Name="btnAdd" Content="{Binding Resource.btnAdd, Source={StaticResource CustomLocStrings}}" Width="100" Command="{Binding AddCommand, Mode=OneWay}" Margin="5" HorizontalAlignment="Center"  IsEnabled="{Binding IsLimitedUser, Converter={StaticResource TrueToFalseConverter}}"/>

ViewModel:

    AddCommand = new RelayCommand(() => Add());

    private void Add()
    {
       game _game = new game();
       _game.recid = 1;
       _game.teamid = GlobalVariables.CurrentUser.teamid;

       if (this.games != null)
       {
           this.games.Add(new gameViewModel(_game));
       }
       else
       {
            var _games = new List<gameViewModel>();
            _games.Add(new gameViewModel(_game));
            this.games = new ObservableCollection<gameViewModel>(_gamees);
       }

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

Я нашел подобную проблему здесь (http://forums.lhotka.net/forums/p/9086/43212.aspx):, но не смог перевести ее в мою ситуацию:

Я пробовал это с EventTocCommand

     <i:Interaction.Triggers>
     <i:EventTrigger EventName="Click">
      <cmd:EventToCommand Command="{Binding Path=AddCommand}" PassEventArgsToCommand="True" CommandParameter="{Binding ElementName=dataGrid}"/>
                    </i:EventTrigger>

А потом

    RelayCommand<EventArgs> AddCommand = new RelayCommand<EventArgs>(Add);

но когда я нажимаю, ничего не происходит, я подозреваю, что мой параметр команды неверен ..

Надеюсь, у кого-то есть решение, так как мой пользовательский интерфейс на самом деле не «удобный», как сейчас ..

Заранее спасибо,

Mike

1 Ответ

0 голосов
/ 12 сентября 2011

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

SelectedItem = "{Binding SelectedItem}"

Итак, создайте свой объект, добавьте егок сетке и установите SelectedItem для того же (нового) объекта.

...