.net WPF控件的Binding.Mode=Default的默认值是什么?
在WPF中,选择时取决于要绑定的属性 我正在寻找各种控件的默认值的一些列表或约定或任何信息。.net WPF控件的Binding.Mode=Default的默认值是什么?,.net,wpf,binding,dependency-properties,binding-mode,.net,Wpf,Binding,Dependency Properties,Binding Mode,在WPF中,选择时取决于要绑定的属性 我正在寻找各种控件的默认值的一些列表或约定或任何信息。 我的意思是,默认情况下什么属性是双向的等等。 欢迎任何链接、想法、想法甚至咆哮 与UpdateSourceTrigger类似 模式属性的默认值 每种属性都不同。 用户可编辑的属性,例如 TextBox.Text,ComboBox.Text, MenuItem.IsChecked等,具有双向 作为其默认模式值。算出 如果默认值为双向,请查看 依赖项属性信息 财产的一部分。如果它说 默认情况下,bindst
我的意思是,默认情况下什么属性是双向的等等。 欢迎任何链接、想法、想法甚至咆哮 与UpdateSourceTrigger类似 模式属性的默认值 每种属性都不同。 用户可编辑的属性,例如
TextBox.Text
,ComboBox.Text
,
MenuItem.IsChecked
等,具有双向
作为其默认模式值。算出
如果默认值为双向
,请查看
依赖项属性信息
财产的一部分。如果它说
默认情况下,bindstwoway
设置为true,
然后是
属性是双向的。去做
以编程方式获取属性
通过调用
GetMetadata
,然后检查布尔值
默认情况下,bindstwoway的值
财产
资料来源:
最安全的方法是始终明确您希望从绑定中获得什么样的绑定模式。下面是一种查找DP支持的默认模式的方法-
.NET Reflector是您的朋友。使用reflector,搜索文本框
,然后
查看静态构造函数的源代码(.cctor()
)。给你
将能够找到用于注册TextProperty
DP:
请注意,一个参数被传递到Register方法,表示
默认绑定模式:
默认情况下,FrameworkPropertyMetadataOptions.bindstwoway
。如果你使用
要查看TextBlock的文本DP的注册,请执行以下操作:
将看到没有传递这样的值,在这种情况下,我们假设
默认情况下,绑定是一种方式
摘自Bea Stollnitz的帖子:
虽然有一些重要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;
}
有趣的是,大多数控件都有一个具有双向绑定的TextSearch属性。有没有一个地方可以找到所有属性及其绑定模式默认值的列表?规则是什么?财产清单是无穷无尽的。我想大部分都是微软的。我没有看到任何信息和绑定模式,所以我想你必须自己去发现。我在回答中给出的url解释了如何查找元数据为UIPropertyMetadata而不是FrameworkPropertyMetadata的依赖项属性呢?默认情况下,此类属性的MSDN文档没有提到BindsTwoWayBy,因为UIPropertyMetadata上不存在该布尔值。不是列表,但默认情况下使用双向绑定的属性在依赖项属性信息
段中提到了这一点。默认情况下,元数据属性设置为true的行中有一个bindstwoway
条目。查找参考源也很容易:
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