Witam,
jestem na początku swojej przygody z C# i zatrzymałem się na pewnym zagadnieniu.
W katalogu "Views" mam dwa okna (MainWindowView.xaml oraz RenameProfileView.xaml).
W katalogu "ViewModels" mam dwie klasy (MainWindowViewModel.cs oraz RenameProfileViewModel.cs).
W katalogu "Models" mam model opisujący profil (plik ProfileModel.cs). Mam tam różne właściwości, np. public string Name { get; set; }
W MainWindowViewModel tworzę kolekcję (ObservableCollection<ProfileModel>) do której dodaję wszystkie znalezione profile (są w osobnych plikach json).
Kolekcję mam zbindowaną do kontrolki ComboBox w MainWindowView. Wszystko działa i w ComboBox mam swoje profile :)
Idąc dalej dodałem nową właściwość, która przechowuje aktualnie wybrany profil - i właśnie z nią będę miał później problem.
private ProfileModel _selectedProfile;
public ProfileModel SelectedProfile
{
get { return _selectedProfile; }
set { _selectedProfile = value; }
}
Nową właściwość zbindowałem do "SelectedItem" w moim ComboBoxie. Jest ok, działa jak powinno.
Teraz dla wybranego w ComboBoxie profilu chcę zmienić nazwę - w nowym oknie.
Dodałem przycisk, do którego mam podpięte polecenie - jego zadaniem jest otworzenie nowego okna (RenameProfileView).
Zrobiłem implementację RelayCommand, tak więc przycisk działa ok.
Jeżeli to istotne, to kod otwierający okno wygląda tak:
private void RenameProfile(object parameter)
{
_ = new RenameProfileView().ShowDialog();
}
...i w tym momencie stanąłem przed problemem.
W nowym oknie mam TextBoxa, w którym chciałem wyświetlić nazwę wybranego wcześniej profilu. Czyli powinienem przesłać "SelectedProfile" do tego okna.
Sadzę, że rozwiązałem to w mało elegancki sposób:
Zmieniłem swoją właściwość "selectedProfile" na statyczną, a w RenameProfileViewModel dodałem:
using static MyFirstProgram.ViewModels.MainWindowViewModel;
Teraz oczywiście mam już dostęp do mojego "SelectedProfile". Mogę korzystać ze wszystkich właściwości mojego obiektu, w tym właśnie z "Name".
Zacząłem jednak czytać o komunikacji między ViewModels i natknąłem się na coś o nazwie "mediator".
Nie wiem czy dobrze zrozumiałem ideę tego rozwiązania... czy mogę z tego skorzystać właśnie do przesłania mojego "SelectedProfile" i wtedy nie będzie musiała być statyczna? Jeżeli tak, to czy bawić się w napisanie własnego "mediatora", czy skorzystać z biblioteki typu "MVVM Light" i rozwiązań, które dostarcza - w tym wypadku Messengera?
A może jeszcze inaczej rozwiązać temat z przesłaniem mojego "SelectedProfile"?
Dzięki za pomoc :)