2011-01-31 96 views
0

我有一个带有两页的WPF应用程序。在第一页上,有一个TextBox(boxSource)。在第二页,我有一个TextBlock(blockDestination)。我想在XAML中使用boxSource的Text属性绑定到blockDestination的Text属性。如何将TextBlock的文本属性绑定到文本框的文本属性

当应用程序初始化时,我将第二页的DataContext设置为第一页。我设置blockDestination如下:

<TextBlock Name="blockDestination" Grid.Row="0" Grid.Column="1" Text="{Binding boxSource, Path=Text, Mode=OneWay}" /> 

这不拾取文本框的值。我的猜测是,这是因为TextBox是一个变量而不是属性?

任何人都可以解释这个问题,是否有一个优雅的解决方案?

感谢所有帮助

回答

2

要使XAML正常工作,需要将第一页的数据上下文设置为第一页的数据上下文,并将boxSource变量定义为属性,以便在设置器中引发PropertyChanged事件。

Matthias说得对,虽然这是一个非常脆弱的方式来实现这一点,并且从长远来看,MVVM方法将更加强大。

1

优雅的解决办法是定义通用于所有页面视图模型。您应始终绑定到视图模型的属性,并应避免绑定到UI元素。使用视图模型,您可以随时访问所有必要的值,并在不同的页面中定义多个演示文稿。

我读过一些关于具有自己的对象空间的页面,以便UI元素可以在不同的页面中具有相同的名称。加载第二个页面后,可能会出现第一个页面不可用的情况。绑定目标将不可用。

+0

它确实存在,并且可以被访问。我看到你关于视图模型的观点;我同意,这将是一个更好的解决方案。尽管如此,我仍然对绑定行为感到好奇。 – Sako73 2011-01-31 18:48:03

+0

您可以启用wpf应用程序的调试输出,以便将绑定异常打印到控制台(Visual Studio中的输出窗口)。也许这有帮助。 – 2011-01-31 18:50:42

相关问题