-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;
    }

それとも、これを間違った方法で行っていますか?

編集:

MainWindow のどこでも使用できるように文字列を取得および設定できる必要があるため、ラベルは重要ではありません。また、文字列「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

ウィンドウのコンストラクターを介して 2 番目のウィンドウに値を渡そうとしましたか?

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 に答える