我的View Model存在一個問題,它的行爲很奇怪。我有一些屬性,我打電話RaisePropertyChanged(()=> TotalHours),但在視圖方面沒有任何反應。這是我的模型的簡介。我運行MVVM Light。窗口不會對提出的屬性更改的事件做出反應
我在我的viewmodel中被稱爲AxData的模型由兩個ObservableCollections組成,這兩個ObservableCollections包含一些實現了ObservableObject的對象。這些在視圖中反應良好。我在我的模型中也有一個IsDirty和TotalHours屬性。這些根本沒有反應。 Axdata正在實施MVVM Light中的ObservableObject。
爲了能夠使用我的IsDirty標誌,我使用CollectionChanged訂閱了兩個集合。我還訂閱PropertyChanged事件在物體上收集這些內部通過執行以下操作:
private void AttachListners()
{
WorkUnits.CollectionChanged += OnCollectionChanged;
Projects.CollectionChanged += OnCollectionChanged;
}
private void OnCollectionChanged(object o, NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs)
{
if (notifyCollectionChangedEventArgs.NewItems != null)
{
foreach (ObservableObject item in notifyCollectionChangedEventArgs.NewItems)
{
item.PropertyChanged += OnSubItemPropertyChanged;
}
}
if (notifyCollectionChangedEventArgs.OldItems != null)
{
foreach (ObservableObject item in notifyCollectionChangedEventArgs?.OldItems)
{
item.PropertyChanged -= OnSubItemPropertyChanged;
}
}
IsDirty = true;
RaisePropertyChanged(() => TotalHours);
}
private void OnSubItemPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
{
IsDirty = true;
RaisePropertyChanged(() => TotalHours);
}
當調試代碼我可以完全在兩個OnCollectionChanged和OnSubItemPropertyChanged到達RaisePropertyChanged(()=> TotalHours)。所以我在TotalHours上舉旗。 IsDirty提高自身:
public bool IsDirty
{
set
{
_isDirty = value;
RaisePropertyChanged(() => IsDirty);
}
get { return _isDirty; }
}
總學時實施
public double TotalHours
{
get { return WorkUnits.Sum(unit => unit.Hours); }
}
TotalHours只是綁定到一個文本塊:
<TextBlock Text="{Binding AxData.TotalHours}"/>
IsDirty所使用的地方是訂閱我的模型我的視圖模型物業更改事件:
private void AxDataOnPropertyChanged(object o, PropertyChangedEventArgs propertyChangedEventArgs)
{
if (propertyChangedEventArgs.PropertyName == "IsDirty")
{
PopulateTitle();
}
}
我應該注意到,我ObservableCollections中的所有對象大都是通過Datagrids編輯的。所有更改都正確執行,所有數據都正確更改,但我不知道這些信息是否可能至關重要。
那麼爲什麼我的視圖不會對變化做出反應?希望你能提供幫助,因爲我現在已經堅持了一個月左右。我錯過了什麼。
什麼是AxData?你提出這個對象的PropertyChanged事件嗎?你的TotalHours屬性如何實現? – mm8
「ObservableCollections持有一些對象」< - 您的對象是否實現INotifyPropertyChanged? –
您可能還想添加'UpdateSourceTrigger = PropertyChanged'到您的綁定 –