如何将数据从子表单事件传递到父表单项?

时间:2011-01-24 08:16:50

标签: c# silverlight xaml web-applications silverlight-4.0

目前我有一个主表单,我从中调用一个弹出窗口,我在拼写检查器的单独XAML文件中创建。它被称为:

SpellCheckerPopupControl popupControl = new SpellCheckerPopupControl();

popupControl.SpellChecklistBox.Items.Clear();

//some code to check the word and populate the child listbox with spelling suggestions

popupControl.SpellCheckerPopup.IsOpen = true;

我在列表框中的SelectionChanged子项中设置了一个事件,以便将数据传递回主窗体,目前我只想将选择内容传递回主窗体,以便我可以选择所选单词和用它替换拼写错误的一个。不幸的是,我似乎无法将子表格事件中的数据传回父母。

SpellCheckerPopup的XAML只是一个<PopUp>,里面有<ListBox>

仅仅出于测试目的,我试图只取结果的输出并将字符串粘贴到主文本框中,如下所示:MainPage.txtArticle.Text = s;,但是当MainPage位可用时,它的所有元素都不是,因此我无法从儿童事件中操纵它们。

3 个答案:

答案 0 :(得分:0)

制作窗口的属性

var window = new popupControl.Open();

然后在window.closed事件检查Window.txtArticle。文本;

这应该有效。如果没有,则将它们绑定到后面代码中的属性。

[更新]

示例:

var window = new MyTestChildWindow();
//This is just to show how to change properties in the testwindow.
window.SomeProperty = true;
window.Show();
window.Closed += (s, ea) =>
{
  if (window.DialogResult.ToBoolean())
  {
    // this is a property in the code behind.
    if (window.SelectedItem != null)
    {
      //Property = property on mainpage
      //window.SelectedItem = property in childwindow
      this.Property = window.SelectedItem;
    }
  }
};

此代码会显示在您的主页面中。

希望这会有所帮助。

答案 1 :(得分:0)

您还可以在Program.cs文件中创建一个可以传递值的属性。然后,您可以访问该属性应用程序。只需使用:

Program.SomeProperty

答案 2 :(得分:0)

使用变量,在其他地方声明是一个问题的处方,因为没有什么可以保证“外部”数据的实际情况。

如果您的活动是路由活动,您可以随时查询OriginalSource并从中获取信息。如果您的活动不是路由活动,您可以创建附加活动并将弹出窗口传递给OriginalSource。