在数据网格中添加未按预期mvvm指示灯工作的行
本文关键字:mvvm 指示灯 工作 数据网 数据 网格 添加 | 更新日期: 2023-09-27 18:00:55
我使用的是mvvm Light,我想要的是在数据网格中添加/删除一些行。初始值会显示出来,但当我添加一些信息时,我的集合会填充我输入的值,但其类型是GalaSoft.MvvmLight.ObservableObject
,而不是"MyType",因此,当我想删除新添加的行时,应用程序会崩溃(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>
视图中模型:
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));
}
}
SetProperty方法(来自BindableBase类(负责引发属性更改事件。它应该工作:(