2015-05-04 106 views
0

我有兩個WPF窗口:登錄和信息。我如何在Info.xaml.cs中將Login.xaml.cs中的變量「userName」稱爲?我想讓「userName」中的輸入顯示在Info窗口的列表視圖中。如何從一個窗口調用變量到另一個窗口

Login.xaml.cs:

public string userName { get; set; } 

public void UNameInput_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    userName = UNameInput.Text;    
} 

Info.xaml:

 <ListView x:Name="AInfoLv" FontFamily="Tahoma" FontSize="11" Background="White" BorderBrush="{x:Null}" Height="264" 
          Width="262" Foreground="Black" Margin="-4,-1,0,0"> 
        <ListView.View> 
         <GridView> 
          <GridViewColumn x:Name="LabelColumn" Header="Label" Width="100" DisplayMemberBinding="{Binding Path=Label}"/> 
          <GridViewColumn x:Name="ValueColumn" Header="Value" Width="130" DisplayMemberBinding="{Binding Path=Value}"/> 
         </GridView> 
        </ListView.View> 
    </ListView> 

Info.xaml.cs:

public Info() 
{ 
    InitializeComponent(); 

    this.AInfoLv.Items.Add(new { Label = "Login" }); 
    this.AInfoLv.Items.Add(new { Label = " Username" }); 
} 
+0

什麼是登錄和信息之間的關係? – sac1

+0

Hi @sac,Login是用戶登錄窗口,Info用於顯示用戶信息,所以實際上我只是想在Login窗口中檢索用戶名輸入並在Info窗口的列表視圖中顯示它。 – YWah

+0

[XAML和WPF - 將變量傳遞給XAML Windows]可能的重複(http://stackoverflow.com/questions/2550535/xaml-and-wpf-passing-variables-to-xaml-windows) – Dbl

回答

1

通過構造通行證。

你的構造Info()更改爲:

Info(string userName) 

當創建在Login.xaml.cs(在這裏,你有你的userName輸入值)的信息對象這個值傳遞給Info構造,像這樣:

// userName is your input value 
var oInfo = new Info(userName) 

在info類的構造函數中使用傳遞值來顯示在你的屏幕上:

public Info(string userName) 
    { 
     InitializeComponent(); 

     this.AInfoLv.Items.Add(new { Label = "Login" }); 
     this.AInfoLv.Items.Add(new { Label = " Username" }); 

     // userName variable contains value of input 
    } 

UPDATE:

A =登錄窗口,B =主窗口C =信息窗口

這是A類創建B類對象:

class A { 
    public void processB() { 
     var b_obj = new b(username); // username is enter by user 
    } 
} 

這是B類的商店username通過A並有方法創建C類對象。

class B { 
    private string usernameFromA; 
    public B (string tmpUsername) { 
     usernameFromA = tmpUsername; 
    } 
    public void processC() { 
     var c_obj = new c(usernameFromA); 
    } 
    } 

這是CB獲得用戶名類。

class C { 
     public C(string tmpUsername) { 
      // Here you have your username in tmpUsername variable 
     } 
    } 
+0

嗨@Aram Kocharyan,感謝您的解決方案。假設A =登錄窗口,B =主窗口C = Info窗口,如果我想將變量從A傳遞給C,但C必須由B打開,那麼該怎麼辦?我設法通過A打開C,但不能通過登錄窗口打開信息窗口。 – YWah

+0

@YWah請看看最新的答案。 –

+0

謝謝@Aram Kocharyan,它適合我:) – YWah

0
public string userName; 

public void UNameInput_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    userName = UNameInput.Text;    
} 

private void LoginButton_Click(object sender, RoutedEventArgs e) 
{ 
    someWindow window = new someWindow(userName); 
    page.ShowDialog(); 
} 

someWindow.xaml.cs:

public string UserName; 

public someWindow(string name) //get the value from login window into someWindow using constructor 
{ 
    InitializeComponent(); 
    UserName = name; 
} 
0

你一個Singleton類來存儲常見的數據。 檢查下面定義的Session類。

Session.cs

using System; 

namespace Singleton 
{ 
    public class Session 
    { 
     private static object _InstanceLock = new object(); 

     private static Session _Instance; 

     public static Session Instance 
     { 
      get { 
       if (_Instance == null) 
       { 
        lock(_InstanceLock) 
        { 
         if (_Instance == null) 
          _Instance = new Session(); 
        } 
       } 
       return _Instance; } 
     } 


     // Private constructor, so that no other class can instantiate Session class 
     private Session() 
     { 

     } 

     public String UserName { get; set; } 
    } 
} 

Login.xaml.cs

public void UNameInput_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    Session.Instance.UserName = UNameInput.Text; 
} 

Info.xaml。CS

你可以,如果你想要編寫單元測試,然後讓你的會話類實現一個接口,通過Session.Instance.UserName

訪問用戶名。

0

如果您只打算在一個地方使用userName那麼最簡單的方法就是聲明static readonly property,如下所示。

Login.xaml.cs:

public static string userName { get; private set; } 

public void UNameInput_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    userName = UNameInput.Text;  
} 

Info.xaml.cs:

public Info() 
{ 
    InitializeComponent(); 

    this.AInfoLv.Items.Add(new { Label = "Login" }); 
    this.AInfoLv.Items.Add(new { Label = " Username" }); 

    // use it here 
    var userName = Login.userName; 
} 
相關問題