我不了解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)
{
}

最佳答案

像这样在您的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)));
        }
    }

    ...
}

关于c# - 绑定(bind)中的PropertyChanged,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42705271/

10-12 02:34