改变WPF中的依赖属性的值

时间:2011-11-02 22:30:00

标签: wpf dependency-properties

我们有一个包含多个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

1 个答案:

答案 0 :(得分:0)

正如@CodeNaked所指出的,这类似于Dependency Property Coercion binding issues  并在.Net 4.0中修复。与此同时,对于.Net 3.5 SP1,我们正在强制更新导致更改事件的元素的绑定(在我们的示例中为TextBox)。希望这会有所帮助。

此致

埃里克。