*已解决* 我终于解决了这个问题' 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;它的方式..
提前致谢,
麦克
答案 0 :(得分:0)
我没有尝试过,但我认为设置SelectedItem值得一试。
SelectedItem =“{Binding SelectedItem}”
因此,创建对象,将其添加到网格中,并将SelectedItem设置为相同的(新)对象。