У меня есть страница, содержащая кнопку, чей Datacontext взят из статического ресурса в этом коде:
<ObjectDataProvider x:Key="DataContext" ObjectType="{x:Type modelview:ProductionPageModelView}"/>
<Button Content="Save" DataContext="{StaticResource DataContext}" IsEnabled="{Binding HasPandingChanges,UpdateSourceTrigger=PropertyChanged,Mode=OneWay,NotifyOnSourceUpdated=True}"
Command="{Binding ModifyProduction}" Margin="4" HorizontalAlignment="Stretch" Grid.Row="1" Grid.Column="1" VerticalAlignment="Center"/>
Этот ресурс связан с ModelView
, а свойство IsPandingChanges
находится в базовом классе.ProductionPageModelView
, (можно сказать, BaseModelView
класс).
И у меня в представлении класс модели:
public static Dictionary<object, OpertationType> ChangeTracker { get; } = new Dictionary<object, OpertationType>();
public bool HasPandingChanges => ChangeTracker.Count > 0;
, когда я добавляю элемент в ChangeTracker Словарь, ничего не меняется и в отладке показывает, что он возвращает true.
Я пытался поместить OnPropertyChanged
в каждую ChangeTracker.Add
реализацию метода
public virtual object AddData()
{
DataTransactionType = OpertationType.Insert;
if (ChangeTracker.ContainsKey(this))
{
ChangeTracker[this] = DataTransactionType;
}
else
ChangeTracker.Add(this, DataTransactionType);
OnPropertyChange(nameof(HasPandingChanges));
return null;
}
OnProeprtyChanged Method
protected virtual void OnPropertyChange([CallerMemberName] string Propertyname = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(Propertyname));
}
Когда я звоню AddData
.Ничего не изменилось, даже HasPandingChanges
возвращает true.