Отключите кнопку Save в WPF, если проверка перестала работать

Вот один из способов:

>>> a = {
... 'a' : 'banana',
... 'b' : 'orange',
... 'c' : 'pineapple',
... 'd' : 'apple' }
>>> [k for k,v in a.items() if v in set(('banana','orange'))]
['a', 'b']
>>>

set важен только для большого количества ключей. Обратите внимание, что, как прокомментировал @DeepSpace, это требование указывает на неправильный дизайн вашего кода, и вам следует подумать о другом способе структурирования данных.

21
задан THelper 9 May 2012 в 14:24
поделиться

1 ответ

1) Я хотел бы сохранить const в mVec, чтобы он считался постоянным во всех других методах X

  • Это любопытное использование const для переменной-члена. И это бросает вызов хорошему дизайну. По определению, строительство - это процесс, который требует изменения объекта.

  • Что касается вашего требования сохранять объект неизменяемым - используйте правильную инкапсуляцию. Вы должны использовать функции const -member для раскрытия любой функциональности, основанной на вашем mVec , для клиентов вашего класса.

2) Я хотел бы избежать ненужных копий, если это вообще возможно , То есть одно решение состоит в том, чтобы иметь статический метод, который создает неконстантную временную переменную для диапазона 1, вставляет диапазон 2 и возвращает его, и затем определите конкатенационный конструктор для

. Вы должны смотреть на конструкторы перемещения и ссылки на r-значения в целом (обещанная цель C ++ 0x). Прочитайте эту статью .

Если вы хотите, чтобы включение / отключение обновлялось, как только значение в TextBox изменяется , установите UpdateSourceTrigger = "PropertyChanged» в привязке для TextBox .

РЕДАКТИРОВАТЬ: Если вы хотите проверить / аннулировать на основе всех привязок в элементе управления, вот несколько советов.

1) Вы уже реализуете IDataErrorInfo . Попробуйте реализовать свойство IDataErrorInfo.Error так, чтобы оно возвращало строку, которая недопустима для всех свойств, с которыми вы связываетесь. Это будет работать, только если весь ваш элемент управления привязан к одному объекту данных. Установите e.CanExecute = string.IsNullOrEmpty (data.Error);

2) Используйте отражение, чтобы получить все открытые статические свойства DependencyProperties для соответствующих элементов управления. Затем вызовите BindingOperations.GetBindingExpression (relatedControl, DependencyProperty) в цикле для каждого свойства, чтобы можно было проверить проверку.

3) В конструкторе вручную создать коллекцию всех связанных свойств во вложенных элементах управления. В CanExecute выполните итерацию по этой коллекции и проверьте каждую комбинацию DependencyObject / DepencyProperty , используя BindingOperation.GetBindingExpression () для получения выражений, а затем исследуя [11146121]. HasError .

38
ответ дан 29 November 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: