Próbuję zrozumieć Binding, więc wymyśliłem bardzo prosty program próbujący go przetestować.
Mam następujący element w moim MainWindow:
<ComboBox Name="comboBox1" ItemsSource="{Binding ComboItems}" />
W moim Kodzie mam następujące obserwowalne kolekcje:
private readonly ObservableCollection<string> comboItems =
new ObservableCollection<string>();
public ObservableCollection<string> ComboItems
{
get {return comboItems; }
}
Mogę z powodzeniem dodawać elementy w ten sposób w dowolnym momencie podczas wykonywania, o ile combobox był od samego początku w MainWindow XAML:
ComboItems.Clear();
ComboItems.Add("Item");
Moje pytanie brzmi: jak mogę zaktualizować ComboBox, jeśli załaduję go z pliku? Mam następujący kod, aby zapisać i załadować plik:
File.WriteAllText("ComboBox.xaml", saveComboBox)
To jest tylko ostatnia linia w moim sejfie. Mam inne przedmioty, które nie mają znaczenia dla tej dyskusji.
ComboBox comboBox = System.Windows.Markup.Xamlreader.Load(stream) as ComboBox;
To oszczędza i ładuje mój combobox z powodzeniem. Problem, który napotykam teraz, polega na tym, że kod:
ComboItems.Clear();
ComboItems.Add("Item");
Nie działa. Jestem w trakcie próby poznania powiązania danych dla nowego projektu, który będę robić. Ten projekt będzie wymagał załadowania plików xaml dla interfejsu użytkownika i muszę wypełnić ComboBox po jego załadowaniu.
Jakie jest najprostsze i najbardziej efektywne rozwiązanie tego problemu?
Odpowiedzi:
1 dla odpowiedzi № 1Nie wiem, czy XamlReader
zachowa nawet wiązania, przeczyta dokumentację, ma ograniczenia. I tak nie polecałbym tego robić. Jeśli wiązanie zniknęło mógłby utwórz nowy w kodzie, częściowo pokonuje cel jego zapisania.