我不明白PropertyChanged
事件在绑定上下文中是如何工作的。 请考虑以下简单代码:
public class ImageClass
{
public Uri ImageUri { get; private set; }
public int ImageHeight { get; set; }
public int ImageWidth { get; set; }
public ImageClass(string location)
{
//
}
}
public ObservableCollection<ImageClass> Images
{
get { return (ObservableCollection<ImageClass>)GetValue(ImagesProperty); }
set { SetValue(ImagesProperty, value); }
}
public static readonly DependencyProperty ImagesProperty = DependencyProperty.Register("Images", typeof(ObservableCollection<ImageClass>), typeof(ControlThumbnail), new PropertyMetadata(null));
在运行时,我对Images
集合的某些元素进行了更改:
Images[i].ImageWidth = 100;
它没有任何影响 - 据我了解,因为PropertyChanged
事件没有定义,然后没有触发。
我很困惑如何声明这样的事件以及我需要在事件处理程序函数中放入什么。
我试图这样做:
foreach (object item in Images)
{
if (item is INotifyPropertyChanged)
{
INotifyPropertyChanged observable = (INotifyPropertyChanged)item;
observable.PropertyChanged += new PropertyChangedEventHandler(ItemPropertyChanged);
}
}
private void ItemPropertyChanged(object sender, PropertyChangedEventArgs e)
{
}
在ImageClass
中实现INotifyPropertyChanged
接口,如下所示:
public class ImageClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int imageWidth;
public int ImageWidth
{
get { return imageWidth; }
set
{
imageWidth = value;
PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(nameof(ImageWidth)));
}
}
...
}