Каковы значения по умолчанию для привязки.Mode=значение по умолчанию для элементов управления WPF?
в WPF Binding.Mode
при выборе по умолчанию, это зависит от свойства густеет.
Я ищу какой-то список или какое-то соглашение или любую информацию для значений по умолчанию для различных элементов управления.
Я имею в виду, какие свойства TwoWay
по умолчанию и так далее.
Любые ссылки, идеи, мысли и даже напыщенные речи приветствуются!
3 ответа:
подобно UpdateSourceTrigger, значение по умолчанию для свойства режим варьируется для каждого свойства. Редактируемые свойства, такие как
TextBox.Text
,ComboBox.Text
,MenuItem.IsChecked
и т. д.TwoWay
как их значение режима по умолчанию. Фигурировать если значение по умолчанию:TwoWay
посмотри на сведения о свойстве зависимостей раздел имущества. Если он говоритBindsTwoWayByDefault
имеет значение true, затем значение режима по умолчанию собственность-этоTwoWay
. Сделать его программно получить свойство метаданные свойства позвонив по телефонуGetMetadata
затем проверьте логическое значениеBindsTwoWayByDefault
свойство.источник: http://blogs.msdn.com/wpfsdk/archive/2006/10/19/wpf-basic-data-binding-faq.aspx
самый безопасный способ-всегда быть явным, какой режим привязки вы хотите от привязки.
вот способ найти режим по умолчанию, поддерживаемый DP -
.NET Reflector-ваш друг. С отражателем, поиск
TextBox
и посмотрите на источник для статического конструктора (.cctor()
). Здесь вы сможете найти код, используемый для регистрацииTextProperty
ДП: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
. Если вы используете рефлектор, чтобы посмотреть на регистрацию для текстового DP TextBlock, вы увидим, что такое значение не передается, и в этом случае мы предполагаем, что привязка является одним из способов по умолчанию.взято из сообщения Беа Штольниц:как я могу обновить явную привязку в шаблоне?
хотя наличие какого-то списка важных DP было бы очень полезно.
также искал список, в основном, чтобы узнать, какие Привязки могут быть установлены в один конец для повышения производительности. Следующие функции могут помочь вам найти, какие элементы управления используют двустороннюю привязку по умолчанию:
public IList<DependencyProperty> GetAttachedProperties(DependencyObject obj) { var result = new List<DependencyProperty>(); foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(obj, new Attribute[] { new PropertyFilterAttribute(PropertyFilterOptions.Valid) })) { var dpd = DependencyPropertyDescriptor.FromProperty(pd); if (dpd != null) { result.Add(dpd.DependencyProperty); } } return result; } public bool IsBindsTwoWayByDefault(DependencyObject obj, DependencyProperty property) { var metadata = property.GetMetadata(obj) as FrameworkPropertyMetadata; if (metadata != null) { return metadata.BindsTwoWayByDefault; } return false; }
используя функцию печати, дает нам список:
var objList = new List<DependencyObject> { new TextBox(), new TextBlock(), new Label(), new ComboBox(), new Button() }; foreach (var obj in objList) { var props = GetAttachedProperties(obj); foreach (var prop in props) { if(IsBindsTwoWayByDefault(obj, prop)) Debug.WriteLine($"{obj} : {prop.OwnerType}:{prop.Name}"); } }
пример результата (свойства элемента управления с двусторонней привязкой по умолчанию)
System.Windows.Controls.TextBox : System.Windows.Controls.TextBox:Text System.Windows.Controls.TextBox : System.Windows.Controls.TextSearch:Text System.Windows.Controls.TextBlock : System.Windows.Controls.TextSearch:Text System.Windows.Controls.Label : System.Windows.Controls.TextSearch:Text System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.ComboBox:IsDropDownOpen System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.ComboBox:Text System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.Primitives.Selector:SelectedIndex System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.Primitives.Selector:SelectedItem System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.Primitives.Selector:SelectedValue System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.TextSearch:Text System.Windows.Controls.Button : System.Windows.Controls.TextSearch:Text
интересно, что большинство элементов управления имеют свойство TextSearch, которое имеет двустороннюю привязку.