Cześć, mam następujący problem:
Tworzę prosty chat i wewnątrz viewModel mam 2 property:
- SendTextBoxContent (przytrzymującą zawartość TextBoxa, do którego wpisujemy co chcemy wysłać)
- MessageWindowContent (przetrzymująca odebrane wiadomości)
(Fragment MainWindowViewModel, który przetrzymuje oba pola)
public class MainWindowViewModel : ViewModelBase
{
// Kod...
public string MessageWindowContent
{
get => _messageWindowContent;
set => this.RaiseAndSetIfChanged(ref _messageWindowContent, value);
}
public string SendTextBoxContent
{
get => _sendTextBoxContent;
set => this.RaiseAndSetIfChanged(ref _sendTextBoxContent, value);
}
/ / Kod
}
(Klasa ViewModelBase sama w sobie jest pusta, dziedziczy jedynie po ReacitveUI.)
Problem w tym, że kiedy wpisuję do kontrolki jakiś tekst, to odpowiadające property nie jest aktualizowane pomimo powiązania.
(Fragment pliku .axaml)
<TextBox
Name="SendTextBox"
Text="{Binding SendTextBoxContent}" <---- IDE podpowiada, że Property zostało poprawnie wykryte
Grid.Column="0"
Background="{DynamicResource InputBoxColor1}"
Foreground="{DynamicResource FontColor2}" />
Program się kompiluje, ale kiedy próbuję coś wysłać, to wartość SendTextBoxContent jest pobierana jako "":
(Metoda odpowiadająca za wysyłanie wiadomości [wstępna wersja])
public void SendAction()
{
MessageWindowContent += "Me: " + SendTextBoxContent + "\n"; <---- SendTextBoxContent nieprawidłowo pobierana jako pusty string
_messenger.SendMessage(SendTextBoxContent + "\n");
SendTextBoxContent = "";
}
Żeby było ciekawiej, to w tej samej aplikacji mam również okienko logowania, które działa na identycznej zasadzie i wartości są sczytywane poprawnie:
(Fragment LoginWindowViewModel)
public class LoginWindowViewModel : ViewModelBase
{
// Kod
public string ServerAddress
{
get => _serverAddress ?? "";
set => this.RaiseAndSetIfChanged(ref _serverAddress, value);
}
public string LoginName
{
get => _loginName ?? "";
set => this.RaiseAndSetIfChanged(ref _loginName, value);
}
}
(Fragment pliku .axaml LoginWindow)
Name="PortText"
Background="{DynamicResource InputBoxColor1}"
Foreground="{DynamicResource FontColor2}"
Text="{Binding Port}" <-- Ponownie, IDE wskazuje, że binding jest poprawny
/>
Nie rozumiem, dlaczego pomimo praktycznie identycznej implementacji, w jednym okienku wszystko działa poprawnie, a w drugim nie działa w ogóle. :/
Z góry dziękuję za pomoc. :)
PS. Avalonia jest bardzo podobna do WPF, więc jeżeli nie pracowałeś/aś z Avalonią, ale masz doświadczenie z WPF to i tak pisz śmiało.