wpf mvvm中的Datagrid SelectedIndex在RaisePropertyChanged上设置为0

时间:2014-03-13 08:55:59

标签: c# wpf xaml mvvm datagrid

我正在使用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?

1 个答案:

答案 0 :(得分:0)

尝试将selectedindex设置回原来的

Dispatcher.BeginInvoke(new Action(() => docgrid.SelectedIndex = oldIndex), DispatcherPriority.DataBind);

如果没有工作,请尝试使用其他优先事项。