Проверьте наличие ожидающих изменений при использовании явной привязки WPF - PullRequest
4 голосов
/ 19 декабря 2011

У меня есть модальное всплывающее окно, содержащее CheckBox, который использует явную привязку для обновления источника привязки, когда пользователь нажимает кнопку сохранения в форме.

<CheckBox Content="Default" IsChecked="{Binding Path=Unit.IsDefault, Mode=TwoWay, UpdateSourceTrigger=Explicit"/>

Теперь я хочу добавить кнопку отмены в форму, если пользователь щелкает ее, я хотел бы проверить наличие ожидающих обновлений привязки и, если да, показать пользователю сообщение.

Можно ли это сделать с привязками? Я надеюсь на что-то вроде:

BindingExpression binding = cb.GetBindingExpression(CheckBox.IsCheckedProperty);
binding.HasPendingUpdates(); // Anything similar to this?

В противном случае у кого-нибудь есть другие предложения о том, как отслеживать изменения в привязках, которые еще не были явно обновлены?

Ответы [ 3 ]

1 голос
/ 29 декабря 2012

Как отметил Куриан, свойство IsDirty на BindingExpressionBase можно использовать, если вы используете .NET 4.5.

В то же время, обходным путем может быть проверка внутреннего свойство NeedsUpdate с использованием отражения:

public static bool IsDirty(this BindingExpression binding)
{
    if (binding == null)
        throw new ArgumentNullException("binding");

    var needsUpdateProperty = typeof(BindingExpressionBase).GetProperty("NeedsUpdate", BindingFlags.Instance | BindingFlags.NonPublic);
    var isDirtyAsObject = needsUpdateProperty.GetValue(binding, null);
    if (isDirtyAsObject is bool)
        return (bool)isDirtyAsObject;

    return false;
}
0 голосов
/ 11 декабря 2012

defaultCheckBox.GetBindingExpression (CheckBox.IsCheckedProperty) .IsDirty

0 голосов
/ 19 декабря 2011

Вы можете использовать конвертирование. Добавьте некоторые свойства IsSuspended и HasPendingChanges в конвертер. Когда IsSuspended имеет значение true, возвращает Binding.DoNothing () из конвертера и устанавливает для HasPendingChanges значение true внутри конвертера. В противном случае верните исходное значение и присвойте HasPendingChanges значение false.

При объявлении этого конвертера в xaml установите IsSuspended в true. Когда пользователь нажимает на кнопку, сначала проверьте HasPendingChanges, а затем установите IsSuspended в false и обновите привязку. после обновления верните IsSuspended в true.

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