我们有一个包含多个TextBox
的自定义WPF控件。每个TextBox
都将其Text
属性绑定到自定义控件上的依赖项属性(使用generic.xaml
模板)。
如果提供的数据不正确,我们希望更改在我们的自定义控件中TextBox
中输入的值。我们知道我们可以使用验证来接受或拒绝某个值,但这不符合我们的需求,因为我们只是想稍微改变一下这个值。
例如,如果用户在特定11
中输入TextBox
,我们希望将其更新为2011
。或者我们希望将TextBox
之一的值大写,无论用户输入什么。
我们似乎无法找到正确的WPF依赖属性机制来干净地执行此操作。我们尝试了CooerceCallback,但它不会更新在依赖项属性中启动更改的TextBox
。绑定到该依赖项属性的其他控件将获得修改后的值,但不会获取调用者。
我们的一个想法是更改推荐的默认“属性模板”,使其不仅仅是SetValue(property, value)
。所以一个例子是:
public string Year
{ get { return (string)GetValue(YearProperty);}
{ set {
var newVal = UpdateValue(value);
SetValue(YearProperty, newVal);
}
}
但是这不起作用,因为与依赖属性的绑定不会使用底层的.Net属性,而是直接使用SetValue()。
如果我没有让每个人都对这个问题感到困惑,我将不胜感激。
此致
埃里克。
PS:我们正在使用.Net 3.5 SP1
答案 0 :(得分:0)
正如@CodeNaked所指出的,这类似于Dependency Property Coercion binding issues
并在.Net 4.0中修复。与此同时,对于.Net 3.5 SP1,我们正在强制更新导致更改事件的元素的绑定(在我们的示例中为TextBox
)。希望这会有所帮助。
此致
埃里克。