.net - класса - wpf binding path



Каковы значения по умолчанию для Binding.Mode=По умолчанию для элементов управления WPF? (2)

Подобно UpdateSourceTrigger, значение по умолчанию для свойства Mode изменяется для каждого свойства. Пользовательские свойства, такие как TextBox.Text , ComboBox.Text , MenuItem.IsChecked и т. Д., Имеют значение TwoWay качестве значения по умолчанию для режима. Чтобы выяснить, является ли значение по умолчанию « TwoWay , просмотрите раздел «Информация о свойствах зависимостей» свойства. Если он говорит, что BindsTwoWayByDefault имеет значение true, то значением по умолчанию для свойства является TwoWay . Чтобы сделать это программным путем, получите метаданные свойств свойства, вызвав GetMetadata а затем проверьте значение BindsTwoWayByDefault свойства BindsTwoWayByDefault .

Источник: http://blogs.msdn.com/wpfsdk/archive/2006/10/19/wpf-basic-data-binding-faq.aspx

Самый безопасный способ - всегда быть явным, какой режим привязки вы хотите от привязки.

В WPF Binding.Mode при выборе значения по Default это зависит от Binding.Mode свойства.

Я ищу какой-то список или какое-то соглашение или любую информацию по умолчанию для различных элементов управления.
Я имею в виду, какие свойства TwoWay по умолчанию и так далее. Любые ссылки, идеи, мысли и даже уговоры приветствуются!


Answer #1

Вот способ найти режим по умолчанию, поддерживаемый DP -

.NET Reflector - ваш друг. С рефлектором найдите TextBox и посмотрите на источник статического конструктора ( .cctor() ). Здесь вы сможете найти код, используемый для регистрации TextProperty DP:

TextProperty = DependencyProperty.Register
               (
                   "Text", 
                   typeof(string), 
                   typeof(TextBox), 
                   new FrameworkPropertyMetadata
                   (
                      string.Empty, 
                      FrameworkPropertyMetadataOptions.Journal |
                      FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
                      new PropertyChangedCallback(TextBox.OnTextPropertyChanged), 
                      new CoerceValueCallback(TextBox.CoerceText), 
                      true, 
                      UpdateSourceTrigger.LostFocus
                   )
                );

Обратите внимание, что параметр передается методу Register, указывающему режим привязки по умолчанию: FrameworkPropertyMetadataOptions.BindsTwoWayByDefault . Если вы используете рефлектор, чтобы посмотреть на регистрацию TextBlock Text DP, вы увидите, что такое значение не передается, и в этом случае мы предполагаем, что привязка по умолчанию является одним из способов.

Взято с поста Bea Stollnitz: Как я могу обновить явное связывание в шаблоне?

Хотя наличие какого-то списка важных ДП было бы очень полезно.





binding-mode