将数据从一个窗口传递到另一个窗口

时间:2013-02-27 14:39:07

标签: c# wpf

我有2个窗口。当我按下按钮时,我想将Person对象从当前Window传递到另一个。

这是主窗口中的代码:

private void Button_Click(object sender, RoutedEventArgs e)
{
    person owner = new person();
    owner.ID = 1;
    owner.Name = "Mark";
    w2 newWindow = new w2(owner);

    newWindow.Show();
}

在名为w2的另一个窗口中,我有以下代码:

public partial class w2 : Window
{
    public class person
    {
        int _ID;
        string _Name;

        public int ID
        {
            get { return _ID; }
            set { _ID = value; }
        }
        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }
   }

   public w2()
   {
       InitializeComponent();
   }

   public w2(person passedPerson) : this()
   { 
       this.passedPerson = passedPerson;
   }
}

我在尝试编译时遇到这些错误:

  

错误3'passing.w2'不包含'passedPerson'的定义,并且没有扩展方法'passedPerson'接受类型'passing.w2'的第一个参数可以找到(你是否缺少using指令或程序集参考?48 18传递

     

错误1'passing.w2.w2(passing.w2.person)'的最佳重载方法匹配有一些无效的参数57 28传递

     

错误2参数1:无法从'passing.MainWindow.person'转换为'passing.w2.person'57 35传递

顺便说一句。我用这个例子作为起点:

http://go4answers.webhost4life.com/Example/pass-variables-windowopen-wpf-31068.aspx

4 个答案:

答案 0 :(得分:1)

尝试明确指定传递的人的每个属性。我的意思是尝试做

public w2(MainForm.person passedPerson)
        : this()
{
    this.passedPerson.ID = passedPerson.ID;
    this.passedPerson.Name = passedPerson.Name;
}

您可能已为Person定义了2个类。每种形式一种。

虽然你应该只定义一次人。 (创建一个单独的类并将其用于两种形式)

答案 1 :(得分:1)

首先,简单的一个:

  

'passing.w2'不包含'passedPerson'的定义

当你说:

this.passedPerson = passedPerson;

显然,您正在尝试为此人分配实例字段,但没有此类字段。只需添加一个:

private person passedPerson;

对于其他两个错误,这是因为您定义了两个person类,每个窗口一个。你不应该这样做。仅仅因为有两个具有相同名称和相同字段的类,不会使它们成为同一个类,并不意味着您可以将其视为另一个类。

在顶层创建您的person类(理想情况下,在其自己的文件中),并确保两个窗口都使用该定义。

另请注意,按照惯例,类名以大写字母开头:

答案 2 :(得分:0)

将类嵌套在类中并不会创建它的成员。 试试

public partial class w2 : Window
{
   private person passedPerson;
   ....
}

然后使用引用填充您的成员。

或更好:将您的班级人员置于其他班级之外,以便他们都可以访问其定义。

答案 3 :(得分:0)

您确定您的“所有者”变量属于w2类(w2.person)中定义的类型吗?你的this.passedPerson字段定义在哪里?它看起来根本没有定义。 如果要在“父”类之外使用它,则不应创建内部类。只需将Person类放在一个单独的文件中即可。