Cũng đang tìm kiếm một danh sách, chủ yếu để tìm ra các ràng buộc nào có thể được đặt thành một chiều để cải thiện hiệu suất.Các chức năng sau có thể giúp bạn tìm kiểm soát sử dụng hai chiều ràng buộc theo mặc định:
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;
}
Sử dụng chức năng in, cho chúng ta một danh sách:
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}");
}
}
kết quả mẫu (các thuộc tính kiểm soát với hai chiều ràng buộc theo mặc định)
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
Điều thú vị là hầu hết các điều khiển đều có thuộc tính TextSearch có liên kết hai chiều.
Nguồn
2017-11-21 16:36:27
Có nơi nào tôi có thể tìm thấy danh sách tất cả các thuộc tính và giá trị mặc định BindingMode của chúng không? các quy tắc là gì? – Shimmy
Danh sách các thuộc tính là vô tận. Tôi đoán http://msdn.microsoft.com liệt kê hầu hết những thứ từ Microsoft. Tôi không thấy bất kỳ thông tin và chế độ ràng buộc ở đó vì vậy tôi đoán bạn sẽ phải tìm ra điều đó một mình. Url mà tôi đưa ra trong câu trả lời của tôi giải thích cách tìm chúng –
Điều gì về các thuộc tính phụ thuộc có siêu dữ liệu là UIPropertyMetadata chứ không phải là FrameworkPropertyMetadata? Các tài liệu MSDN cho các thuộc tính như vậy không đề cập đến BindsTwoWayByDefault vì boolean đó không tồn tại trên UIPropertyMetadata. – HappyNomad