我在用户控件中有一些文本框:
<TextBox Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<TextBox Text="{Binding Path=Street, UpdateSourceTrigger=PropertyChanged}"></TextBox>
XAML中是否有办法为我的绑定做一些样式,这样我就不必为每个文本框写UpdateSourceTrigger=PropertyChanged
而只写Path=
部分?
提前谢谢!
答案 0 :(得分:5)
我真的很生气地写了一些疯狂的长约束短语每次时间我想要绑定到一个属性,所以我这样做了一年多我才偶然发现this post. < / p>
它基本上是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>
这比尝试将每个要在绑定短语中少写的控件子类化更容易。
答案 1 :(得分:2)
不,没有办法通过XAML或Style来做到这一点。您可以期望的最好的方法是构建一个更改默认行为的自定义控件。类似的东西:
public class MyTextBox : TextBox {
static MyTextBox() {
TextProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata() { DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged });
}
}
然后,您需要使用MyTextBox
代替TextBox
。