我有一個類包含另一個類的ObservableCollection。如果其中一個類成員發生更改,我希望得到通知,因爲我需要在MediaCollection類中進行一些計算。所以我增加了一個事件的那類:如何從同一個類中的靜態函數調用公共事件?
public event PropertyChangedEventHandler PropertyChangedEvent;
被稱爲在此集合類:
public class MediaCollection : INotifyPropertyChanged
{
private List<MediaEntry> ModifiedItems = new List<MediaEntry>();
private ObservableCollection<MediaEntry> tagList = new ObservableCollection<MediaEntry>();
public MediaCollection()
{
tagList = new ObservableCollection<MediaEntry>();
tagList.CollectionChanged += CollectionChangedHandler;
}
public void CollectionChangedHandler(object sender, NotifyCollectionChangedEventArgs e)
{
foreach (MediaEntry newItem in e.NewItems)
{
ModifiedItems.Add(newItem);
newItem.PropertyChangedEvent += OnItemPropertyChanged;
}
...
}
public void OnItemPropertyChanged(object sender, PropertyChangedEventArgs e)
{
MediaEntry item = sender as MediaEntry;
if (item != null)
ModifiedItems.Add(item);
}
的MediaEntry類看起來是這樣的:
public class MediaEntry : DependencyObject
{
public event PropertyChangedEventHandler PropertyChangedEvent;
public bool IsError
{
get { return (bool)GetValue(IsErrorProperty); }
set { SetValue(IsErrorProperty, value); }
}
public static readonly DependencyProperty IsErrorProperty =
DependencyProperty.Register("IsError", typeof(bool), typeof(MediaEntry), new
UIPropertyMetadata(PropertyChanged));
public static void PropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
if (obj is MediaEntry)
{
((MediaEntry)obj).ObjectPropertyChanged(args);
}
}
該調用會通知UI等等,但要將事件引發到容器類,我需要引發PropertyChangedEvent(在容器類中偵聽)。根據文件,我需要添加這些行:
public static void PropertyEventChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
PropertyChangedEventHandler handler = PropertyChangedEvent;
if (handler != null)
{
handler(obj, new PropertyChangedEventArgs(args.Property.Name));
}
}
,我需要從公共靜態無效調用的PropertyChanged功能。但是,這裏是真正的問題,我如何從靜態函數中調用公共事件?
我已經嘗試了許多人一樣,許多事情:
更改公共事件PropertyChangedEventHandler到公共靜態事件。這將給出如下錯誤:「成員MediaEntry.PropertyChangedEvent不能通過實例引用進行訪問;使用類型名稱來代替它」
將public static void PropertyChanged更改爲非靜態版本,但這會在所有UIPropertyMetadata(PropertyChanged))部件上發生錯誤,並顯示以下錯誤消息:「非靜態字段,方法或屬性需要對象引用」
還有一些,但都無濟於事。
我以某種方式認爲我需要這裏的代表,但現在不要如何或從哪裏開始。在解決我的問題時,我非常感謝任何幫助。
你剛剛救了一天!我完全目睹了被調用的OnPropertyChanged(是的,我已經有了它,但在代碼中沒有提到)。從那裏我可以舉辦我的活動和一切作品就像一個魅力。非常感謝Francesco。 – riesm
是的,我應該改變我的財產名稱,因爲這可能是這個問題的開始! – riesm