-2

我在将信息从一个 wpf 窗口传递到另一个窗口时遇到问题。出于某种原因,当加载主窗口时,标签中没有设置任何内容,我需要能够将数据保存在字符串中以用于任何事情(标签不重要但显示我的意思)?

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    public string MyData { get; set; }

    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        label1.Content = MyData;

    }

public partial class LoginWindow : Window
{
    public LoginWindow()
    {
        InitializeComponent();
    }
    private void button2_Click(object sender, RoutedEventArgs e)
    {
         string mytext = "blabla";
         MainWindow fromloginwindow = new MainWindow(); 
         fromloginwindow.Mydata = mytext;
    }

还是我做错了?

编辑:

请不要对标签不重要我需要能够获取和设置一个字符串以在主窗口中的任何位置使用。此外,字符串“mytext”也无关紧要,因为显然我不会以这种方式设置字符串。

4

3 回答 3

1

Loaded 事件发生在您设置 MyData 之前,更改代码如下:

public partial class MainWindow : Window
{
   public MainWindow(string data)
   {
      MyData = data 
      InitializeComponent();        
   }
于 2012-04-25T17:48:20.953 回答
1

听起来您遇到了事件生命周期问题;对事件的调用Loaded发生得很快,因此设置文本的机会已经过去。相反,您应该做的是:

1) 将属性绑定到 XAML 中的标签

public event PropertyChangedEventHandler PropertyChanged;

public MainWindow()
{
    InitializeComponent();
    DataContext = this;
}

protected string _myData = string.Empty;
public string MyData
{
    get { return _myData; }
    set { _myData = value; NotifyPropertyChanged("MyData"); }
}

protected void NotifyPropertyChanged(string propName)
{
    var methods = PropertyChanged;

    if(methods != null)
       methods(this, new PropertyChangedEventArgs(propName));
}

<Label Content="{Binding MyData}" />

2)通过另一种方法(或在属性声明中)设置控件文本:

public void SetLabel(string text)
{
    label1.Content = text;
}

protected void button2_Click(object sender, RoutedEventArgs e)
{
     MainWindow x = new MainWindow();
     x.SetLabel("blabla");
}
于 2012-04-25T17:49:35.907 回答
0

您是否尝试过通过窗口的构造函数将值传递给第二个窗口?

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    public MainWindow(string data)
        : this()
    {
        label1.Content = data;
    }
}

public partial class LoginWindow : Window
{
    public LoginWindow()
    {
        InitializeComponent();
    }

    private void button2_Click(object sender, RoutedEventArgs e)
    {
         string mytext = "blabla";
         MainWindow fromloginwindow = new MainWindow(mytext); 
    }
}
于 2012-04-25T17:51:02.180 回答