2014-10-10 3 views
0

У меня есть следующая проблема: я не знаю, почему мой DataBinding не работает (я сделал это уже в своей программе так же, как и работает). Возможно, это не работает. Я передаю MainWindow и перехожу к Window2, но моя ссылка настроена на Window2 только для MainWindow. Не знаю, как ее решить. Мой код (К сожалению пришлось сократить его, я надеюсь, что я не забыть что-нибудь, так как 2 окна более 600 или 700 строк кода)DataBinding Между двумя WPF-окнами с 2 текстовыми полями

private void btLogin_Click(object sender, RoutedEventArgs e) 
{ 
    var Window2 = new Window2(); 
    Login USERTB= new Login(); //reference to reach the Login table and check if we can read the logged user from it 
    Window2.Show(); 
    USERTB.Username = tbLoginUser.Text; //checking if it knows the username- working yet 
    this.Hide(); 
} 

После этого, проблема начинается, значение моего текстового поля из MainWindow Бесполезный перейдите ко второму, даже если я попытаюсь получить его с помощью ссылки USER. Вот в Window2.xaml & Window2.cs:

Window2.cs:

string action; 
public string Action 
{ 
    get { return this.action; } 
    set { this.action= value; OnPropertyChanged("Action"); } 
} 



private void SmthHappens(object sender, DependencyPropertyChangedEventArgs e) 
{ 
    var felh = new MainWindow(); 
    Action= felh.USER; //in here didn't pass the MW's tb value ,so here is the problem 
    tbShow.Text = Action; 
} 

Я пытаюсь передать значение Tb МВТ к W2 tbShow. Я думаю, мой код ошибочен в SmthHappens, потому что я уже прошел MW и потерял значение tbLoginUser. Но я не знаю, как это решить. Пожалуйста помоги!

РЕШЕННЫЙ! Спасибо за ответы, я решил это так же, как я пытаюсь это сделать. Может быть, я проверю MVVM немного позже, но теперь у меня мало что осталось от моей программы, поэтому я заканчиваю ее :)

ответ

1

В этих случаях полезно использовать шаблон MVVM, обычно используемый в WPF. Вы должны создать класс модели, содержащий свойства, которые вы хотите предоставить, и передать это через модель просмотра в две формы.

Подробнее о шаблоне проектирования MVVM, используемом в WPF, см. this article on MSDN.

0

Вы создаете новый экземпляр MainWindow, поэтому var felh не содержит данных, которые вы поместили в первом экземпляре MainWindow. Вы должны использовать модель (класс для необходимых вам данных) ViewModel (здесь вы создаете экземпляр модели и заполняете данные) и используете эту ViewModel для двух ваших Windows (=> Views). Это будет использование шаблона MVVM (в двух словах). Я предлагаю вам это article.

Если вы никогда не касались MVVM до того, как это будет нелегко на первых шагах, но после тестов на тест-тест вы получите его, и это упростит ситуацию!

EDIT: если вы не хотите, чтобы узнать его и хотите получить грязное решение, которое вы могли бы опробовать singleton шаблон для Thx MainWindow

+0

для ответов! Решил его без MVVM или singleton. Но я проверю это :) – Tom026