WPF: как реализовать включение кнопки «Сохранить» - PullRequest
1 голос
/ 08 июля 2010

Какой самый чистый способ иметь состояние «Сохранить» для приложения, чтобы при каждом обновлении свойства или содержимого включались параметры «Сохранить».

Например, есть меню и панель инструментов с кнопками «Сохранить». Когда приложение WPF открывается впервые, обе кнопки отключены. Когда пользователь обновляет свойства или документ, кнопки становятся активными до тех пор, пока не будет выполнено «Сохранить», после чего они возвращаются к отключенным.

Ответы [ 2 ]

1 голос
/ 08 июля 2010

Привязка IsEnabled к ViewModel, который предоставляет логическое свойство IsDirty или HasBeenModified или что-то подобное.ViewModel будет следить за изменениями в модели и устанавливать IsDirty в значение true, если модель модифицируется по какой-либо причине.При сохранении ViewModel может сказать, что для IsDirty установлено значение false, отключив кнопку.

Вы используете шаблон Model-View-ViewModel, верно?Вот несколько ссылок на шаблон, чтобы помочь вам на вашем пути, на всякий случай:

http://en.wikipedia.org/wiki/Model_View_ViewModel

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

http://www.wintellect.com/CS/blogs/jlikness/archive/2010/04/14/model-view-viewmodel-mvvm-explained.aspx

0 голосов
/ 08 июля 2010

Все ли свойства, которые вы хотите наблюдать, принадлежат к одному и тому же классу?Если это так, то будет работать что-то вроде этого:

  1. Класс должен быть производным от INotifyPropertyChanged;
  2. Следите за изменениями свойств в классе и устанавливайте флаг IsDirty при наличии изменений
  3. Установите IsEnabled для кнопки Сохранить на основе флага IsDirty
  4. Когда команда Сохранитьвыполнено, установлено 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, другие), и я проверю это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...