Классические элементы пользовательского интерфейса в Windows Presentation Foundation. Шамшев Ан. Б. - 104 стр.

UptoLike

Составители: 

103
}
Такая реализация имеет два недостатка. Первый состоит в том, что
простой флаг isDirty больше не подходит, поскольку следить требуется за
двумя текстовыми полями. Эту проблему можно решить двумя способа-
ми:
воспользоваться для хранения флага isDirty свойством
TextBox.Tag в таком случае при каждом вызове метода
CanExecuteSave() придется просто просматривать свойство Tag
отправителя;
создать для хранения значения isDirty закрытый словарь с индек-
сацией по ссылке элемента управления в таком случае при вы-
зове метода CanExecuteSave() нужно будет просто отыскивать зна-
чение isDirty, принадлежащее отправителю.
Ниже показан код, необходимый для реализации второго варианта:
private Dictionary<Object, bool> isDirty = new Dictionary<Object, bool>();
private void txt_TextChanged(object sender, RoutedEventArgs e)
{
isDirty[sender] = true;
}
private void SaveCommand_CanExecute(object sender, CanExecuteRoutedEven-
tArgs e)
{
if (isDirty.ContainsKey(sender) && isDirty[sender] == true)
{
e.CanExecute = true;
}
else
{
e.CanExecute = false;
}
}
Другой недостаток текущей реализации связан с тем, что она подра-
зумевает создание двух привязок команд, в то время как на самом деле
необходима только одна. Это привносит беспорядок в файл XAML и