Я не вижу способа создать привязку XAML для существующего свойства, чтобы делать то, что вы пытаетесь сделать. Но вы можете написать собственное свойство IsDirty, основанное на EntityState; Вы можете обновить это значение, подписавшись на событие PropertyChanged, вызванное базовым объектом EntityObject. Конечно, вам нужно также вызвать событие PropertyChanged для IsDirty (чтобы GUI был уведомлен) и игнорировать это событие в вашем обработчике (чтобы предотвратить бесконечную рекурсию).
Изменить: после ОП добавил следующее:
Вот как я это вижу, чтобы ответить на комментарий.
В классе отгрузки можно добавить:
public bool IsDirty { get { return EntityState == EntityState.Modified; } }
public Shipment() {
...
PropertyChanged += OnShipmentChanged;
}
private void OnShipmentChanged(object sender, PropertyChangedEventArgs pcea) {
if (pcea.PropertyName != "IsDirty") { // prevent recursion
OnPropertyChanged("IsDirty"); // notifies binding listener that the state has changed
}
}
Ночью я подумал о другом пути, который заключается в создании мультисвязывания для каждого свойства Shipment (которое заменило бы все это понятие свойства IsDirty и фактически ответило бы на исходный вопрос). Это может иметь смысл, если есть только пара свойств отгрузки. Я бы сказал, что если их больше 3, мы должны забыть об этой идее.