Odpowiedzi na to zostaną udzielone w innych licznych wątkach dotyczących wiązania danych i wdrażania INotifyPropertyChanged. Nadal mam jednak trudności z uruchomieniem tego.
Zasadniczo mam dwa pola listy, gdy użytkownikwybiera nazwę serwera z pierwszego pola listy, drugie ma dostarczyć listę baz danych na tym serwerze. Dość proste. Drugi zestaw list nie wyświetla jednak zaktualizowanej listy baz danych.
Oto kod: Kod do wykonania zapytania i dodania danych do właściwości DatabaseList.
private void selection_Server_SelectionChangeCommitted(object sender, EventArgs e)
{
server = (string)selection_Server.SelectedItem;
try
{
ExecDBList(server, ref vm);
}
Klasa zarządzająca właściwościami używanymi w oknie.
public class VM : INotifyPropertyChanged
{
private static List<string> _dblist;
public List<string> DatabaseList
{
get
{
return _dblist;
}
set
{
if (_dblist != value)
{
_dblist = value;
};
}
}
public VM() { }
void OnPropertyChanged(string PropertyName)
{
PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
Linia kodu przy inicjalizacji MainWindow, która przypisuje pole danych DataSource
selection_RDM.DataSource = vm.DatabaseList;
Jakakolwiek pomoc w uruchomieniu tego rozwiązania byłaby bardzo doceniana, ponieważ staram się zrozumieć poprzednie odpowiedzi na temat wiązania danych i używania PropertyChangedEventHandler.
Dziękuję Ci Richard
Odpowiedzi:
0 dla odpowiedzi № 1Spróbuj dodać OnPropertyChanged();
po ustawieniu wartości na _dblist
lubię to:
public List<string> DatabaseList
{
get
{
return _dblist;
}
set
{
if (_dblist != value)
{
_dblist = value;
OnPropertyChanged("DatabaseList");
};
}
}
Nie ma miejsca, w którym zadzwonisz do powiadomienia, więc Twoja aplikacja nie zostanie powiadomiona o zmianie
Albo lepiej
Zmień swoje OnPropertyChanged(string name)
do prywatnej nieważności NotifyPropertyChanged([CallerMemberName] String propertyName = "")
i wywołaj tę metodę bez nazwy nieruchomości w tym samym miejscu, w którym pokazałem ci taki sposób
if (_dblist != value)
{
_dblist = value;
NotifyPropertyChanged();
};
0 dla odpowiedzi nr 2
Ostatnio nie działa WinForms, ale współpracuje z WPF, Czy próbowałeś zrobić
RaisePropertyChanged („DatabaseList”);
W ten sposób, po zażądaniu wpisów na prywatnej liście, wszelkie związane z nimi wpisy powinny zostać powiadomione ... hej, twoje źródło zostało właśnie zaktualizowane ... otrzymaj też nową listę.