PropertyChanged绑定

时间:2017-03-09 20:58:08

标签: c# wpf observablecollection

我不明白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) { } 事件未定义,因此未被触发。

我很困惑如何声明这样的事件以及我需要在事件处理函数中添加什么。

我试着这样做:

{{1}}

1 个答案:

答案 0 :(得分:3)

在您的INotifyPropertyChanged中实施ImageClass界面,如下所示:

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)));
        }
    }

    ...
}