2013-03-21 67 views
2

在我的MainWindow中,我創建了一個包含不同設置的類的新實例。設置了類的參數後,我將datacontext =設置爲該類。從新創建的窗口訪問主窗口datacontext

public partial class MainWindow : Window 
{ 

private MeasConSettings mMeasConSettings = new MeasConSettings(); 

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

    private void MenuComm_Click(object sender, RoutedEventArgs e) 
    {// See code below} 

} 

現在我也有一個函數來打開一個新窗口,該窗口包含一個文本框是誰的文字應綁定到主窗口的datacontext的。

private void MenuComm_Click(object sender, RoutedEventArgs e) 
    { 
     FrmSettings newWindow = new FrmSettings(); 
     newWindow.DataContext = mMeasConSettings; 
     newWindow.TxtComm.Text = mMeasConSettings.CommSettings; 
     newWindow.Show(); 
    } 

此代碼填寫在從右邊的內容newWindow文本框,但它並不會必然屬性格式,因爲在DataContext沒有得到(在新創建的窗口TxtComm)在文本框中更改文本後更新。

爲文本框中的XAML代碼的一個例子:

<TextBox Grid.Row="1" Grid.Column="3" Margin="2,0" Name="TxtComm" DataContext="{Binding Path=CommSettings, UpdateSourceTrigger=PropertyChanged}" /> 

「CommSettings」是MeasConsettings類的成員

public class MeasConSettings 
{ 
    private string mCommSettings; 

    public string CommSettings 
    { 
     get 
     { 
      return mCommSettings; 
     } 
     set 
     { 
      mCommSettings = value; 
     } 
    } 

    public MeasConSettings() 
    { 
     CommSettings = "Com5:19200,8,n,1"; 
    } 
} 

我的問題是如何可以調整該值mMeasConSettings.CommSettings (在我的MainWindow中定義)在我的newWindow(它是按下按鈕後創建的),如果我改變我的newWindow中的文本框的值,存儲在mMeasConSettings.CommSettings中的值也應該改變。

PS:我是新來的WPF,所以任何建議,歡迎!

+1

我看不到在您的代碼中創建的綁定。您需要將TextBox的Text屬性綁定到DataContext中的屬性,該屬性應該使用TwoWay綁定進行更改。你的帶有'TextBox'的XAML應該有'''。 – 2013-03-21 14:05:24

+0

@ odyss-jii將文本框的XAML更改爲'工作! – Enrico 2013-03-21 14:15:13

+0

很高興能幫到你! – 2013-03-21 14:15:38

回答

5

正如我在評論中寫道,您需要在TextBoxText屬性綁定到DataContext的財產你想更新。因此,你的XAML應該是這樣的:

<TextBox ... Text="{Binding CommSettings, Mode=TwoWay}" /> 

注意,我的TextBoxText屬性綁定到你的DataContext的財產CommSettings。而你C# -code click事件應該是:

private void MenuComm_Click(object sender, RoutedEventArgs e) 
{ 
    FrmSettings newWindow = new FrmSettings(); 
    newWindow.DataContext = mMeasConSettings; 
    newWindow.Show(); 
} 

我們只需要設置DataContext這裏。請注意,DataContext傳遞給子元素,所以TextBox將與其父元素具有相同的DataContext,除非專門設置爲其他元素。

1

使用靜態屬性:

class Demo 
{ 
    public static string SomeSettings {get;set;} 
    private onLoad() 
    { 
     SomeSettings=... //Init here 
    } 
} 

在其他的文件:

Demo.SomeSettings=....