2011-04-21 52 views
4

我有一些文本框的用户控件:风格绑定?

<TextBox Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}"></TextBox> 
<TextBox Text="{Binding Path=Street, UpdateSourceTrigger=PropertyChanged}"></TextBox> 

是否有XAML的方式做一些像我绑定的样式,这样我就不用写每个文本框中UpdateSourceTrigger=PropertyChanged但只有Path=部分?

预先感谢您!

回答

2

不,没有办法通过XAML或风格来做到这一点。您所希望的最好的方法是构建一个可以更改默认行为的自定义控件。喜欢的东西:

public class MyTextBox : TextBox { 
    static MyTextBox() { 
     TextProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata() { DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged }); 
    } 
} 

然后,你需要的地方TextBox的使用MyTextBox

+0

谢谢你的努力。我已经在那个解决方案中,但是我希望我错过了关于XAML的一些东西。不幸的是, – Dummy01 2011-04-22 07:39:16

5

我也是在写一些疯狂的长期结合词组EVERY时间,我想绑定到财产得到真正恼火,所以我做了一年多前,我碰到this post.

绊倒它基本上子类MarkupExtension(这是什么Binding类)到一个抽象类BindingDecoratorBase提供了所有Binding类提供的属性。所以,从那里,你可以做这样的事情:

public class SimpleBinding : BindingDecoratorBase 
{ 
    public SimpleBinding(string path) : this() 
    { 
    Path = new System.Windows.PropertyPath(path); 
    } 
    public SimpleBinding() 
    { 
    TargetNullValue = string.Empty; 
    UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
    } 
} 

然后你在你的XAML做的是包括你在顶部的命名空间,然后 绑定到一个控制做这样的事情:

<TextBox Text="{m:SimpleBinding Name}"></TextBox> 
<TextBox Text="{m:SimpleBinding Street}"></TextBox> 

这使得它比试图在绑定短语中编写更少的每个控件更加简单。

+0

这是一个比子类更好的方法。在这里,您可以将该技术应用于任何控件的任何绑定。你有没有遇到过这种技术的不足? – 2011-05-06 16:02:51

+0

不是,完全相反。它给了我更多的控制权,例如我曾经使用NotConverter将一个属性绑定到IsEnabled,但是通过这种方法,我允许一些C#语法并让MarkupExtension对我进行否定。因此,我的MarkupExtension允许使用'“{m:SimpleBinding!IsEnabled}”语法。 – Jose 2011-05-09 01:04:04