/ / Databinding Listbox Winforms - c #, winforms, data-binding, inotifypropertychych

Databinding Listbox WinForm - c #, winformy, powiązanie danych, inotifypropertyfikacje

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 № 1

Spró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ę.