wpf mvvm中的Datagrid selecteindex在RaisePropertyChanged上设置为0
本文关键字:设置 RaisePropertyChanged mvvm 中的 Datagrid selecteindex wpf | 更新日期: 2023-09-27 17:49:49
我正在c# Wpf中使用mvvm light开发一个项目。
在这个项目中,我有一个数据网格与SelectedIndex绑定到ViewModel中的int。
DocumentViewModel:
private int _docSelectedIndex;
public int DocSelectedIndex
{
get { return _docSelectedIndex; }
set
{
_docSelectedIndex = value;
RaisePropertyChanged("DocSelectedIndex");
}
}
The View:
<DataGrid HeadersVisibility="Column"
x:Name="docgrid"
IsSynchronizedWithCurrentItem="True"
DataContext ="{Binding Document, Source={StaticResource Locator}}"
ItemsSource="{Binding Path=DocItems}"
SelectedIndex="{Binding DocSelectedIndex,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
...
...
</DataGrid>
绑定成功了!但是每当我想用新数据更新网格时,我需要RaisePropertyChanged("DocItems")。
这似乎将selecteindex更改为0。我试过将selecteindex设置回原来的值,但是索引最后总是设置为0。
这个方法调用了RaisePropertyChanged:
public void UpdateDocumentList(object sender, TypedEventArg<DocListUpdatedEvent> e)
{
var temp = new List<SFODocument>(e.Value.DocumentList);
var meta = _meta.GetPageMetaData();
foreach (var d in temp)
{
foreach (int i in d.PageList)
{
meta[i].docid = d.DocumentID;
_meta.UpdateExistingMeta(meta[i]);
}
}
_docItems = new ObservableCollection<SFODocument>(temp);
RaisePropertyChanged("DocItems");
}
如何在更新数据网格的同时保持原来的selectedIndex ?
尝试用这种方法将selecteindex设置回初始值
Dispatcher.BeginInvoke(new Action(() => docgrid.SelectedIndex = oldIndex), DispatcherPriority.DataBind);