我正在使用mvvm light框架,运用c# Wpf开发一个项目。
这个项目中有一个数据表格,它的SelectedIndex与ViewModel中的int类型属性进行了绑定。
DocumentViewModel:
private int _docSelectedIndex;
public int DocSelectedIndex
{
get { return _docSelectedIndex; }
set
{
_docSelectedIndex = value;
RaisePropertyChanged("DocSelectedIndex");
}
}
视图:
<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")。
这似乎会将选定的索引更改为0。我尝试将选定的索引设置回原来的值,但最终索引总是被设置为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");
}
如何更新datagrid并仍然保留原始的selectedIndex?