Все ли свойства, которые вы хотите наблюдать, принадлежат к одному и тому же классу?Если это так, то будет работать что-то вроде этого:
- Класс должен быть производным от INotifyPropertyChanged;
- Следите за изменениями свойств в классе и устанавливайте флаг IsDirty при наличии изменений
- Установите IsEnabled для кнопки Сохранить на основе флага IsDirty
- Когда команда Сохранитьвыполнено, установлено IsDirty = false
Пример уведомляющего класса
public class NotifyingClass : INotifyPropertyChanged
{
private string Property1Field;
public string Property1
{
get { return this.Property1Field; }
set { this.Property1Field = value; OnPropertyChanged("Property1"); }
}
private string Property2Field;
public string Property2
{
get { return this.Property2Field; }
set { this.Property2Field = value; OnPropertyChanged("Property2"); }
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
Отслеживание изменений свойств
public partial class MainWindow : Window
{
private bool isDirty;
NotifyingClass MyProperties = new NotifyingClass();
public MainWindow()
{
InitializeComponent();
this.MyProperties.PropertyChanged += (s, e) =>
{
this.isDirty = true;
};
}
}
То, как вы устанавливаете отключенное / включенное состояние, зависит от того, какой тип реализации кнопки / команды вы выполняете.Если вам нужна дополнительная помощь, просто дайте мне знать, как вы это делаете (обработчик событий, RoutedCommand, RelayCommand, другие), и я проверю это.