WPF控件的Binding.Mode = Default的默认值是什么?

Shi*_*mmy 58 .net wpf binding dependency-properties binding-mode

在WPF中Binding.Mode,选择默认值时,它取决于绑定的属性.

我正在寻找一些列表或一些约定或任何信息的各种控件的默认值.
我的意思是TwoWay,默认情况下属性是什么等等.任何链接,想法,想法,甚至咆哮都很受欢迎!

Lar*_*ens 68

与UpdateSourceTrigger类似,Mode属性的默认值因每个属性而异.用户可编辑的属性,如 TextBox.Text,ComboBox.Text, MenuItem.IsChecked,等,都有TwoWay 它们的默认模式的价值.要确定默认值是否为TwoWay,请查看属性的"依赖项属性信息"部分.如果将其 BindsTwoWayByDefault设置为true,则属性的默认Mode值为TwoWay.要以编程方式执行此操作,请通过调用获取属性的属性元数据, GetMetadata然后检查BindsTwoWayByDefault 属性的布尔值.

资料来源:http://blogs.msdn.com/wpfsdk/archive/2006/10/19/wpf-basic-data-binding-faq.aspx

最安全的方法是始终明确您希望从绑定中获得什么样的绑定模式.

  • 那些元数据是UIPropertyMetadata而不是FrameworkPropertyMetadata的依赖项属性呢?这些属性的MSDN文档没有提到BindsTwoWayByDefault,因为UIPropertyMetadata上不存在该布尔值. (3认同)
  • 有没有可以找到所有属性列表及其BindingMode默认值的地方?规则是什么? (2认同)

akj*_*shi 10

这是一种查找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
                   )
                );
Run Code Online (Sandbox Code Playgroud)

请注意,参数传递给Register方法,指示默认的绑定模式: FrameworkPropertyMetadataOptions.BindsTwoWayByDefault.如果使用反射器来查看TextBlock的Text DP的注册,您将看到没有传递这样的值,在这种情况下,我们假设绑定是默认的一种方式.

摘自Bea Stollnitz的帖子:如何在模板中更新显式绑定?

虽然拥有一些重要的DP列表会非常有帮助.