2012-04-25 56 views
-2

我从一个wpf窗口传递信息到另一个wpf窗口有问题。出于某种原因,当主窗口加载时,标签中没有设置任何东西,我需要能够将数据保存在字符串中用于任何事情(标签不重要,但显示我的意思)?加载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”也是无关紧要的,显然我不会这样设置字符串。

回答

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"); 
} 
+0

1)不会工作没有INotifyPropertyChanged – thumbmunkeys 2012-04-25 17:52:23

+0

好点,我总是忘记那个接口。我会更新答案。 – Tejs 2012-04-25 17:53:39

+0

将Bernards方法工作?他的外表更简单? – 2012-04-25 17:58:18

1

Loaded事件发生时,您设置迈德特之前,改变这样的代码:

​​
+0

标签不重要它可以在任何我想要的字符串“Mydata”。 – 2012-04-25 18:01:34

+0

所以我看到它,除非label1被设置在get/set方法中,你不能在应用程序的其他地方使用字符串MyData? – 2012-04-25 18:04:34

+0

更新mydata会更新标签,是的。如果我正确理解你的标签的目的是传递一个字符串值? – thumbmunkeys 2012-04-25 18:19:45

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); 
    } 
} 
+0

你可以在主窗口中将它设置为公共字符串吗?我希望能够在从登录窗口发送后在MainWindow中的任何位置使用该字符串。 – 2012-04-25 18:08:33