Я подправил ответ @ markrushakoff, чтобы сделать его вызываемой функцией:
function yesNo {
# prompts user with $1, returns true if response starts with y or Y or is empty string
read -e -p "
$1 [Y/n] " YN
[[ "$YN" == y* || "$YN" == Y* || "$YN" == "" ]]
}
Используйте это так:
$ if yesNo "asfd"; then echo "true"; else echo "false"; fi
asfd [Y/n] y
true
$ if yesNo "asfd"; then echo "true"; else echo "false"; fi
asfd [Y/n] Y
true
$ if yesNo "asfd"; then echo "true"; else echo "false"; fi
asfd [Y/n] yes
true
$ if yesNo "asfd"; then echo "true"; else echo "false"; fi
asfd [Y/n]
true
$ if yesNo "asfd"; then echo "true"; else echo "false"; fi
asfd [Y/n] n
false
$ if yesNo "asfd"; then echo "true"; else echo "false"; fi
asfd [Y/n] ddddd
false
Вот более сложная версия, которая предусматривает заданный по умолчанию значение:
function toLowerCase {
echo "$1" | tr '[:upper:]' '[:lower:]'
}
function yesNo {
# $1: user prompt
# $2: default value (assumed to be Y if not specified)
# Prompts user with $1, using default value of $2, returns true if response starts with y or Y or is empty string
local DEFAULT=yes
if [ "$2" ]; then local DEFAULT="$( toLowerCase "$2" )"; fi
if [[ "$DEFAULT" == y* ]]; then
local PROMPT="[Y/n]"
else
local PROMPT="[y/N]"
fi
read -e -p "
$1 $PROMPT " YN
YN="$( toLowerCase "$YN" )"
{ [ "$YN" == "" ] && [[ "$PROMPT" = *Y* ]]; } || [[ "$YN" = y* ]]
}
Используйте это так:
$ if yesNo "asfd" n; then echo "true"; else echo "false"; fi
asfd [y/N]
false
$ if yesNo "asfd" n; then echo "true"; else echo "false"; fi
asfd [y/N] y
true
$ if yesNo "asfd" y; then echo "true"; else echo "false"; fi
asfd [Y/n] n
false
Наконец, я получил ответ от моего коллеги Джоша Смита , он очень простой, нам просто нужно чтобы вызвать событие PropertyChanged с null или String.Empty в качестве имени свойства. который сообщит системе привязки WPF переоценить все привязки этого объекта. Используя это, я получаю два основных преимущества.
Предположение: Как и в вопросе, который я предположил здесь, это очень особенное состояние, при котором все мои Свойства обновляются одновременно
У меня есть сообщение в блоге, обсуждающее это здесь
Обновление: на основе комментария kek444
Я не думаю, что эту проблему стоит пытаться решить. То есть я думаю, что решение здесь состоит в том, чтобы отдельные свойства отправляли уведомления об изменении свойств по мере их установки. Если нет, что вы собираетесь делать, когда изменится отдельное свойство (но не обязательно все пятьдесят)?