自动滚动到datagridview MVVM灯中新添加的行

时间:2011-09-11 18:51:44

标签: silverlight mvvm-light

*已解决* 我终于解决了这个问题' Dirty'在后面的代码中,可能会更清洁&但更好的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]);
    }

我有一个带有datagrid的视图和一个连接到relaycommand的按钮,用于将记录添加到observable集合(datagrid' itemsource),以下工作正常:

查看:

<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}}"/>

视图模型:

    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);

但点击时没有任何反应,我怀疑我的命令参数错误..

我希望有人有解决方案,因为我的用户界面并不是真正的用户友好&#39;它的方式..

提前致谢,

麦克

1 个答案:

答案 0 :(得分:0)

我没有尝试过,但我认为设置SelectedItem值得一试。

SelectedItem =“{Binding SelectedItem}”

因此,创建对象,将其添加到网格中,并将SelectedItem设置为相同的(新)对象。