我将信息从一个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;
}
或者我是以错误的方式做这件事?
修改
请不要对标签进行切换,我需要能够获得并设置一个字符串以便在MainWindow中的任何位置使用。字符串“mytext”也无关紧要,因为显然我不会这样设置字符串。
答案 0 :(得分:1)
在设置MyData之前发生了Loaded事件,更改代码如下:
public partial class MainWindow : Window
{
public MainWindow(string data)
{
MyData = data
InitializeComponent();
}
答案 1 :(得分: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");
}
答案 2 :(得分: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);
}
}