Witam,
nie mam zbyt dużego doświadczenia w .NET'ie, dlatego proszę Was o pomoc.
Okno podstawowe programu MainWindow:
MainWindow XAML:
...
<ListBox Name="listBoxLista"/>
...
<Button Name="buttonPodglad" Click="buttonPodglad_Click">Podgląd...</Button>
...
MainWindow C#:
...
public List<DaneUzytkownika> listaUzytkownikow = new List<DaneUzytkownika>();
...
OknoPodgladuIEdycjiDanych okienkoPodgladu;
...
private void buttonPodglad_Click(object sender, RoutedEventArgs e)
{
okienkoPodgladu = new OknoPodgladuIEdycjiDanych(listaUzytkownikow[listBoxLista.SelectedIndex].Imie, listaUzytkownikow[listBoxLista.SelectedIndex].Nazwisko, listaUzytkownikow[listBoxLista.SelectedIndex].Mail);
okienkoPodgladu.Show();
}
...
Klasa DaneUzytkownika zawiera trzy pola - Imie, Nazwisko, Mail.
OknoPodgladuIEdycjiDanych XAML:
...
<TextBox Name="textBoxImie" TextChanged="textBoxImie_TextChanged"></TextBox>
<TextBox Name="textBoxNazwisko" TextChanged="textBoxNazwisko_TextChanged"></TextBox>
<TextBox Name="textBoxMail" TextChanged="textBoxMail_TextChanged"></TextBox>
<Button Name="buttonZamknij" Content="Zamknij" Click="buttonZamknij_Click"></Button>
...
OknoPodgladuIEdycjiDanych C#:
...
partial class OknoPodgladuIEdycjiDanych : Window
{
public OknoPodgladuIEdycjiDanych(string imie, string nazwisko, string mail)
{
InitializeComponent();
textBoxImie.Focus();
Imie = imie;
Nazwisko = nazwisko;
Mail = mail;
textBoxImie.Text = Imie;
textBoxNazwisko.Text = Nazwisko;
textBoxMail.Text = Mail;
}
public string Imie { set; get; }
public string Nazwisko { set; get; }
public string Mail { set; get; }
private void textBoxImie_TextChanged(object sender, TextChangedEventArgs e)
{
Imie = textBoxImie.Text;
(App.Current.MainWindow as MainWindow).listaUzytkownikow[(App.Current.MainWindow as MainWindow).listBoxLista.SelectedIndex].Imie = Imie;
zapiszOdswiez();
}
private void textBoxNazwisko_TextChanged(object sender, TextChangedEventArgs e)
{
Nazwisko = textBoxNazwisko.Text;
(App.Current.MainWindow as MainWindow).listaUzytkownikow[(App.Current.MainWindow as MainWindow).listBoxLista.SelectedIndex].Nazwisko = Nazwisko;
zapiszOdswiez();
}
private void textBoxMail_TextChanged(object sender, TextChangedEventArgs e)
{
Mail = textBoxMail.Text;
(App.Current.MainWindow as MainWindow).listaUzytkownikow[(App.Current.MainWindow as MainWindow).listBoxLista.SelectedIndex].Mail = Mail;
zapiszOdswiez();
}
private void buttonZamknij_Click(object sender, RoutedEventArgs e)
{
Close();
}
private void zapiszOdswiez()
{
(App.Current.MainWindow as MainWindow).listBoxLista.ItemsSource = null;
(App.Current.MainWindow as MainWindow).listBoxLista.ItemsSource = (App.Current.MainWindow as MainWindow).listaUzytkownikow;
}
}
...
Po wybraniu danego pola na listBoxLista, a następnie po wciśnięciu przycisku "Podgląd" wyświetla się oddzielne okienko (OknoPodgladuIEdycjiDanych), w którym mam podgląd danej pozycji z listBoxLista, czyli w textBoxImie mamy listaUzytkownikow[listBoxLista.SelectedIndex].Imie, w textBoxNazwisko mamy listaUzytkownikow[listBoxLista.SelectedIndex].Nazwisko, w textBoxMail mamy listaUzytkownikow[listBoxLista.SelectedIndex].Mail.
Przy nadal włączonym oknie OknoPodgladuIEdycjiDanych, po wskazaniu z głównym oknie (MainWindow) innego pola z listBoxLista, zmieniają się dane w oknie OknoPodgladuIEdycjiDanych w polach textBoxImie, textBoxNazwisko, textBoxMail... sprawa jasna, wszystko działa.
Problem polega na tym, że potrzebuję mieć jeszcze funkcjonalność, polegającą na tym, że kiedy zmieniam coś w polach textBox'owych w OknoPodgladuIEdycjiDanych (np. w textBoxImie zmieniam imię na jakieś inne), to w oknie głównym (MainWindow) na listBoxLista, w wybranym aktualnie polu, dane powinny się od razu zmieniać. Od razu - w momencie pisania, czyli kiedy zaczynam pisać "Adam", to dane w na listBoxie mają się 'odświeżać' i pojawiać identycznie do tego, co pojawia się w polu textBoxImie w oknie poglądu. Po to właśnie użyłem TextChanged w XAMLu, ale wywala mi wyjątki w metodach private void textBoxImie_TextChanged(object sender, TextChangedEventArgs e), private void textBoxNazwisko_TextChanged(object sender, TextChangedEventArgs e), private void textBoxMail_TextChanged(object sender, TextChangedEventArgs e) - za pewne jakoś kiepsko odwołuję się do okna głównego ((App.Current.MainWindow as MainWindow)).
Proszę o pomoc.