2010-03-25 60 views
0

我有两个数据绑定的文本框。一个绑定到一个字符串,另一个绑定到一个数字。 '默认'绑定在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); 

在此之后,代码加载到的结合是指属性。

问题是'新'绑定似乎不起作用。我错过了什么?有没有更好的办法?

+0

我的代码唯一错误的是SetBinding调用中的TextBlock.TextProperty!当然,他们应该是TextBox.TextProperty,但我很久以前就混淆了它,我没有看到树木。 – 2010-03-25 17:10:17

+0

我们没有看到你的问题。恭喜! – 2010-03-25 19:58:15

回答

0

我的代码唯一出错的是文本Block .TextProperty在SetBinding调用中!当然,他们应该已经文字 .TextProperty,但我很长时间没有看到树的木材。

2

我可能会考虑暴露View可以绑定到的Prefix和Suffix字符串,然后使用ViewModel中的逻辑或您使用的任何后备对象来相应地填充这些字符串。此选项整齐划分视觉业务关注点,并简化您必须在视图中跟踪的内容。

+0

视图模型公开了字符串和整型属性,并将控件绑定到它们。有时他们需要相反 - 可能更简单些?视图不必做任何事情(它只有InitializeComponent,没有其​​他代码)。 我发现SetBinding和ClearBinding都没有任何影响 - 无论你做什么原始绑定仍然存在。 我使用VS2010RC和Framework 4以防万一它是相关的。 – 2010-03-25 16:06:00

+0

Phil,切换绑定可能是一种有效的方法,但我认为更改数据而不是绑定是更优雅的解决方案。我认为我们公开前缀和后缀的理念,而不是公开数字和字符串。给他自己的。 要帮助调试绑定交换问题,请尝试检查SetBinding的返回值以查看是否有错误并验证状态为活动状态。 – 2010-03-25 17:06:46

0

为什么猴子在绑定所有?如果您希望将文本框绑定到两种不同的东西之一,请创建两个文本框,将它们放在同一位置,并根据您的交换条件切换其可见性。

+0

我修复了它。交换绑定完美地工作。我曾经在Windows窗体和普通Windows代码中使用可见性切换,但它使得窗体/视图设计变得杂乱,我不喜欢它。 我现在完全满意它交换绑定的效果! – 2010-03-25 17:09:17