WPF Binding режим по умолчанию - PullRequest
7 голосов
/ 21 января 2011

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

<ProgressBar Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Height="27" Margin="5,0,5,0" Maximum="{Binding TabuProgressEnd}" Value="{Binding TabuProgress}" />

Пока я тестировал, все в порядке, но когда мой клиент открыл это под VS и запустил этот код, возникло исключение:

An unhandled exception of type 'System.InvalidOperationException' occurred in PresentationFramework.dll

Additional information: A TwoWay or OneWayToSource binding cannot work on the read-only property 'TabuProgress' of type 'TSPLib.TabuEngine'.

Обычно я думаю, что это какой-то обман, но я знаю, что парень не имеет ни малейшего представления о кодировании, и явно помогло "Mode = OneWay". Как это возможно, что режим привязки по умолчанию отличается на разных машинах?

1 Ответ

4 голосов
/ 22 января 2011

Свойство Value в ProgressBar связывает TwoWay по умолчанию, поэтому исключение должно происходить, если вы явно не установите Mode в OneWay.Однако я не могу объяснить, почему это не происходит на вашей машине.Я попытался использовать Reflector с версиями .NET 4.0, 3.5 и 3.0, и, насколько я могу судить, режим привязки по умолчанию не изменился.

Если у вас установлен Reflector, он будетбыло бы интересно посмотреть, как ValueProperty (унаследованный от RangeBase) выглядит на вашей машине

public static readonly DependencyProperty ValueProperty =
    DependencyProperty.Register(
        "Value",
        typeof(double),
        typeof(RangeBase),
        new FrameworkPropertyMetadata(
            0.0,
            FrameworkPropertyMetadataOptions.Journal | 
            FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
            new PropertyChangedCallback(RangeBase.OnValueChanged),
            new CoerceValueCallback(RangeBase.ConstrainToRange)),
        new ValidateValueCallback(RangeBase.IsValidDoubleValue));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...