从Window1调用函数到Window2 WPF C#

时间:2017-01-13 12:53:00

标签: c# wpf

在我的第一个窗口中,我创建了一个函数,它将数据库中的所有数据作为动态按钮加载到堆栈面板内, 它被称为BindImageList()

      public void BindImageList()
    {
        using (MySqlConnection conn = new MySqlConnection(constr))
        {
            conn.Open();

            using (MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT GarmentName,Image FROM tblthesis", conn))
            {
                ds = new DataSet();
                adapter.Fill(ds);
                MainWindow mainWin = new MainWindow();


                foreach (DataRow dataRow in ds.Tables[0].Rows)
                {
                    var imageBuffer = (byte[])dataRow["Image"];
                    var bitmapImage = new BitmapImage();

                    using (var memoryStream = new MemoryStream(imageBuffer))
                    {
                        bitmapImage.BeginInit();
                        bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
                        bitmapImage.StreamSource = memoryStream;
                        bitmapImage.EndInit();
                    }

                    KinectTileButton button = new KinectTileButton();

                    button.BorderThickness = new Thickness(7, 7, 7, 7);
                    button.Background = new SolidColorBrush(Colors.Transparent);
                    button.Width = 185;
                    button.Height = 200;
                    button.Background = new ImageBrush(bitmapImage);
                    button.Click += button_Click;

                    mainWin.spDress.Children.Add(button);

                }
                mainWin.Show();


            }
            conn.Close();



        }

    }


         Window3_loaded 
                {
          BindImagelist();
                 }

当我从Window3_Loaded事件中插入代码时,当前正在我的MainWindow中添加按钮但是 当我从我的MainWindow中调用该函数时:

     MainWindow_Loaded{
         Window3 wewe = new Window3();
        wewe.BindImageList();

        }

它没有像我在window3的加载事件中插入代码时那样在我的堆栈面板中创建一个动态按钮,

但是当我这样做时

         public void BindImageList()
        {
          messagebox.show(my text);
           }

我的消息框正在显示。

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

在整个项目中搜索Window3。如果您可以在屏幕上看到window3,则可能会有一个已创建的实例。使用该实例。

答案 1 :(得分:0)

您的代码无法正常工作,因为您创建了一个新的Window3实例。您需要Window1来调用当前显示的Window3实例的方法。你可以通过两个步骤来做到这一点:

  1. 在Window3.cs文件中定义Window3的静态字段以保存当前显示的实例。

    public static Window3 Current; public Window3(){... Current = this;}

  2. 使用Window1中的静态字段来调用方法。

    如果(Window3.Current!= NULL)     Window3.Current.BindImageList();

  3. 这样,Window1将调用当前活动Window3上的方法,而不是现在未查看的新实例。

    我希望有所帮助。