我正在使用mvvm light在c#Wpf中开发一个项目。
在这个项目中,我有一个dataInrid,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(&#34; DocItems&#34;)。
这似乎将selectedindex更改为0.我试图将selectedindex设置回原始值,但索引最终总是设置为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?
答案 0 :(得分:0)
尝试将selectedindex设置回原来的
Dispatcher.BeginInvoke(new Action(() => docgrid.SelectedIndex = oldIndex), DispatcherPriority.DataBind);
如果没有工作,请尝试使用其他优先事项。