C# 在datagrid中添加行未按预期mvvm指示灯工作

C# 在datagrid中添加行未按预期mvvm指示灯工作,c#,wpf,mvvm-light,wpfdatagrid,C#,Wpf,Mvvm Light,Wpfdatagrid,我正在使用mvvm Light,我想在我的datagrid中添加/删除一些行。会显示初始值,但当我添加一些信息时,我的集合将填充我输入的值,但是它的类型是GalaSoft.MvvmLight.observateObject,而不是MyType,因此,当我要删除新添加的行时,我的应用程序craches SelectedItem为null…如果我要删除未手动添加的行,它会工作 <DataGrid Name="Table" ItemsSource="{Binding MyCollection}"

我正在使用mvvm Light,我想在我的datagrid中添加/删除一些行。会显示初始值,但当我添加一些信息时,我的集合将填充我输入的值,但是它的类型是GalaSoft.MvvmLight.observateObject,而不是MyType,因此,当我要删除新添加的行时,我的应用程序craches SelectedItem为null…如果我要删除未手动添加的行,它会工作

<DataGrid Name="Table" ItemsSource="{Binding MyCollection}" SelectedItem="{Binding SelectedItem}" IsSynchronizedWithCurrentItem="True">
            <DataGrid.Columns>
                <DataGridTextColumn Header="ID" Width="*" Binding="{Binding Path=Id,Mode=TwoWay}"  />
                <DataGridTextColumn Header="Name" Width="*" Binding="{Binding Path=Name,Mode=TwoWay}" />
    </DataGrid.Columns>

在viewModel中:

public MyType SelectedItem
{
  get { return _selectedItem; }
  set
  {
    _selectedItem = value;
    RaisePropertyChanged();
  }
}  
public ObservableCollection<ObservableObject> MyCollection
{
  get
  {
    return _myCollection;
  }
  set
  {
    _myCollection = value;
    RaisePropertyChanged();
  }
}  
public RelayCommand RemoveRow { get { return new RelayCommand(RemoveRowCommand, CanRemove); } }
public RelayCommand AddRow { get { return new RelayCommand(AddRowCommand, CanAdd); } }  

public void RemoveRowCommand()
{
  MyCollection.Remove(SelectedItem);
}

public void AddRowCommand()
{
  MyCollection.Add(SelectedItem);
}

使您的类继承BindableBase。 把财产变成这样

private ObservableColletion<ObservableObject> _myCollection;
public ObservableCollection<ObservableObject> MyCollection
{
  get
  {
    return _myCollection;
  }
  set
  {
    SetProperty(ref _myCollection,new ObservableCollection<ObservableObject>(value));
  }
} 
BindableBase类中的SetProperty方法负责引发属性更改事件。它应该在以下方面发挥作用: