UserControl和Windows之间的交互

时间:2012-09-13 12:00:58

标签: c# wpf data-binding user-controls window

我创建了一个UserControl,其中包含一些conrols(按钮和复选框)。

之后我在WPF Windows中添加了对UserControl的引用。

我想要做的是:当我点击UserControl中的按钮时,此按钮会触发一个动作并更改Windows中的某些内容(Textbox1.Text =“something”)。

我的问题是我无法从UserControl访问Windows内的控件。

请帮忙吗?

EDIT:添加了代码示例

<s:SurfaceWindow x:Class="Project.Temp.MainSurface"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:s="http://schemas.microsoft.com/surface/2008"
                 xmlns:local="clr-namespace:Project"              
                 Title="Project.Temp"
>
<Grid x:Name="Root" ... >
     <Grid x:Name="Child" ... >
         <local:MyUserControl x:Name="UserControlStart" ... />
     </Grid>
...
</Grid>

3 个答案:

答案 0 :(得分:2)

有几种方法可以实现这种“沟通”...这里只是一些方法......还有更多:

1)定义一个命令...单击它时按钮将会引发。

然后在您的Window中,您将处理该命令,并将TextBox更改为某个字符串。

如果要提供某些数据/上下文,可以使用CommandParame。

2)定义一个RoutedEvent(冒泡),它会在树上冒泡,然后Window可以处理它。该事件将由UserControl中的Button引发,并包含您希望在窗口中设置的“文本”。

3)如果你的“某事”是某种“状态”指示符......那么你可以在你的UserControl上提供一个“状态”属性(或者另一个选项有一个包含状态数据的ViewModel)。然后,您的TextBox可以绑定到UserControl(或ViewModel)上的该属性以获取“状态”(作为一个值,然后将其“转换”为带有转换器的可显示消息,或者作为直接字符串)。

答案 1 :(得分:1)

UserControl不应该能够更改Window相关的东西,因为UserControl是独立的实体。

在USerControl中公开一个事件并在Window中处理该事件。在那种情况下,你想要你的窗口

答案 2 :(得分:0)

创建usercontrol时,必须将句柄传递给主窗口。然后,您必须在主窗口中创建公共方法,您可以从用户控件中调用该方法,并更改文本框中的值。