我不明白PropertyChanged
事件如何在綁定上下文中工作。 請考慮這個簡單的代碼:PropertyChanged in binding
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)
{
}
它你有設置對象的值(後後觸發一個事件設置者Setvalue),並在你的視圖中設置{Binding YourObject,UpdateSourceTrigger = PropertyChanged} ...這樣視圖就會知道屬性改變了它的值,並會要求獲取者獲取新值:) –
@BernardWalters請注意t帽子'UpdateSourceTrigger = PropertyChanged'與實現INotifyPropertyChanged並觸發PropertyChanged事件的綁定源無關。實際上,UpdateSourceTrigger控制着一個TwoWay或OneWayToSource綁定如何在目標對象發生變化時觸發源對象的更新,這在OneWay綁定中是不會發生的。 – Clemens