如何自动在自定义控件内创建绑定?
我有自定义工具栏控件与DependencyProperty IsBusy
这是我如何使用它:
按照惯例,我的所有VM都inheritance自基本VM并具有IsBusy属性。 所以,我知道这个属性将始终在VM上可用。
现在我还有另外4个属性。 我想知道如何在控件的代码中自动绑定到这个IsBusy
而不是在XAML中绑定XAML,而不是将它们添加到XAML中。
编辑
实际上,我找到了我的问题的答案: Silverlight:以编程方式绑定控件属性
现在,我的问题是:
在这样的构造函数中应用此绑定是否正确?
public myToolbar() { this.DefaultStyleKey = typeof(myToolbar); var binding = new Binding("IsBusy") { Mode = BindingMode.TwoWay }; this.SetBinding(IsBusyProperty, binding); }
我应该检查此属性是否存在XAML绑定(另一个绑定)而不绑定? 无论哪种方式都有效,但我想知道它是否对性能,气味等有害?
怎么样在onApplyTemplate
这样做。 这是更好的方式吗?
if (GetBindingExpression(IsBusyProperty) == null) { var binding = new Binding("IsBusy") { Mode = BindingMode.TwoWay }; this.SetBinding(IsBusyProperty, binding); }
如果您尝试将此控件与不具有IsBusy
属性的视图模型一起使用会很糟糕,但即使这样,您也只会在输出窗口中收到调试警告,无需担心。
至于绑定的位置,如果您绑定的依赖项属性不在其回调中执行任何操作,则构造函数是合适的。 但是,如果属性更改了回调尝试调用GetTemplateChild
等函数并检索内部控件 – 那么您应该将绑定移动到OnApplyTemplate
函数,因为只有在那里您可以确保存在内部控件。
顺便说一句,如果您的依赖项proeprty没有属性更改回调并且仅在{TemplateBinding IsBusy}
等控件模板中使用,则可以通过{Binding IsBusy}
替换此行。 这样的事情,通过使用绑定或数据触发器:
这个想法很简单: TemplateBinding
应用于控件的依赖属性,而Binding
应用于DataContext对象或视图模型的属性,它们可以共存而不会出现问题。
- 表单身份validation添加其他信息以及ReturnUrl
- 在后面的代码中设置显示属性
- 在设计模式下在visual studio 2012中使用报表查看器时出错
- Emacs typeover skeleton-pair-insert-maybe
- Reflection Emit:如何将Attribute实例转换为CustomAttributeBuilder或CustomAttributeData
- 使用C#.net中的私有存储库的身份validation读取BitBucket API
- 在C#上执行PowerShell命令行
- 如何在没有“进程退出”exception的情况下杀死进程?
- 使用随机类删除数组中的指定元素