2013-03-21 2 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 в MainWindow.

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 (который создается после нажатия кнопки). Если я изменил значение текстового поля в моем новомWindow, значение, сохраненное в mMeasConSettings.CommSettings, также должно быть изменено.

PS: Я новичок в WPF, поэтому любые советы приветствуются!

+1

Я не вижу в вашем коде привязки. Вам нужно привязать свойство Text для TextBox к свойству в DataContext, которое должно быть изменено с помощью привязки TwoWay. Ваш XAML с TextBox должен иметь что-то вроде '. –

+0

@ odyss-jii Спасибо, изменив XAML текстового поля на '' IT WORKED !!! – Enrico

+0

Рад, что я мог бы помочь! –

ответ

5

Как я уже писал в комментариях, что вам нужно, чтобы связать Text свойства вашего TextBox к свойству DataContext которым вы хотите обновить. Таким образом, Ваш XAML должно быть что-то вроде:

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

Обратите внимание, что я связующей Text свойство TextBox свойству CommSettings вашего DataContext. И ваш C# -кода для события щелчка должно быть:

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=.... 
Смежные вопросы