在代码中交换数据绑定

时间:2010-03-25 12:01:02

标签: c# wpf

我有两个数据绑定文本框。一个绑定到一个字符串,另一个绑定到一个数字。 'default'绑定在XAML中设置。在某些情况下,我需要在运行时反转绑定(字符串通常是前缀,但有时它是后缀)。 我在视图模型中有以下代码,在加载窗口时调用:

Binding stringBinding = BindingOperations.GetBinding(view.seqLeft, TextBox.TextProperty);
Binding numberBinding = BindingOperations.GetBinding(view.seqRight, TextBox.TextProperty);
view.seqLeft.SetBinding(TextBlock.TextProperty, numberBinding);
view.seqRight.SetBinding(TextBlock.TextProperty, stringBinding);

之后,代码加载绑定所引用的属性。

问题是“新”绑定似乎不起作用。我错过了什么?还有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

我可能会考虑公开View可绑定的Prefix和Suffix字符串,然后使用ViewModel中的逻辑或您正在使用的任何后备对象来相应地填充这些字符串。此选项可以巧妙地将业务问题从视觉中分割出来,并简化您在视图中需要跟踪的内容。

答案 1 :(得分:0)

为什么一直在使用绑定?如果你想让一个TextBox绑定到两个不同的东西之一,创建两个TextBox,将它们放在同一个位置,并根据你的交换条件切换它们的可见性。

答案 2 :(得分:0)

我的代码唯一不对的是SetBinding调用中的Text Block .TextProperty!当然,它们应该是Text Box .TextProperty,但是我已经搞砸了很长时间,我没有看到树木。