Nit*_*hav 9 observablecollection mvvm inotifycollectionchanged inotifypropertychanged
我试图将observable集合绑定到DataGrid,我想在datagrid中编辑任何行时通知.我的代码适用于添加或删除记录时的通知,但是在编辑记录时没有通知.如果这是使用MVVM中的可观察集合进行绑定的正确方法,请告诉我,以及我是否缺少某些内容.提前致谢.
public class studentViewModel : INotifyPropertyChanged
{
#region constructor
public studentViewModel()
{
_student = new studentModel();
myCollection = new ObservableCollection<studentModel>();
myCollection.Add(_student);
myCollection.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(myCollection_CollectionChanged);
}
void myCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
//throw new NotImplementedException();
System.Windows.MessageBox.Show(e.Action.ToString());
}
#endregion
#region properties
studentModel _student;
ObservableCollection<studentModel> _myCollection;
public ObservableCollection<studentModel> myCollection
{
get { return _myCollection; }
set
{
if (_myCollection != value)
{
_myCollection = value;
raisePropertyChange("myCollection");
}
}
}
public int rollNo
{
get { return _student.rollNo; }
set
{
if (value != _student.rollNo)
{
_student.rollNo = value;
raisePropertyChange("rollNo");
}
}
}
public string firstName
{
get { return _student.firstName; }
set
{
if (value != _student.firstName)
{
_student.firstName = value;
raisePropertyChange("firstName");
}
}
}
public string lastName
{
get { return _student.lastName; }
set
{
if (value != _student.lastName)
{
_student.lastName = value;
raisePropertyChange("lastName");
}
}
}
#endregion
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
public void raisePropertyChange(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this,new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
public class studentModel
{
public int rollNo { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和xaml是
<Window.Resources>
<local:studentViewModel x:Key="StudentsDetails" />
</Window.Resources>
<Grid DataContext="{StaticResource StudentsDetails}">
<DataGrid ItemsSource="{Binding Path=myCollection, Source={StaticResource StudentsDetails}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Name="studentsGrid" CanUserAddRows="True" AutoGenerateColumns="True">
</DataGrid>
</Grid>
Run Code Online (Sandbox Code Playgroud)
Bla*_*hma 11
一个ObservableCollection将通知当一个记录被添加或删除,但用户界面并不时记录被编辑.这取决于已更改的对象以通知它已更改.
在您的情况下,当修改行时,更改的对象的类型是studentModel.
因此,如果你想在这个对象改为得到通知的UI,你需要执行INotifyPropertyChanged上studentModel太..
例如
public class studentModel : INotifyPropertyChanged
.....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12422 次 |
| 最近记录: |