Попытка интерфейса inotifychange и связывания combobox с классом и статическим классом
Привет, я попытался сделать то, что вы сказали, сделав комментарий и посмотрев на Microsoft. Я создал класс State с 3 свойствами (имя, аббревиатуры и список "состояние"), используя INotifyChange в свойствах. Затем я сделал статический класс со списком состояний и в конструкторе добавил все 50 состояний в список и метод для возврата списка в массив. Я не знаю, что еще мне нужно сделать, чтобы привязать свой список к combobox, я чувствую, что я очень близок.
public class US_State : INotifyPropertyChanged { private string _name; public string Name { get { return _name; } set { _name = value; NotifyPropertyChanged(); } } private string _abbreviations; public string Abbreviations { get => _abbreviations; set { _abbreviations = value; NotifyPropertyChanged(); } } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); //if(PropertyChanged!=null)PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } private List<US_State> _allusstates; public List<US_State> AllUSStates { get => _allusstates; set { _allusstates = value; NotifyPropertyChanged(); } } public US_State() { Name = null; Abbreviations = null; } public US_State(string ab, string name) { Name = name; Abbreviations = ab; } public override string ToString() { return String.Format("{0} - {1}", Abbreviations, Name); } } //Static class of all 50 US_state's public static class StatesArray { public static List<US_State> states; static StatesArray() { states = new List<US_State>(50); states.Add(new US_State("AL", "Alabama")); states.Add(new US_State("AK", "Alaska")); //and the rest of the 50 states added just like this way above. } public static US_State[] AllFiftyStates() { return states.ToArray(); } } Code in WPF Window public partial class ProfileScreen : Window { private List<US_State> Get_States = StatesArray.states; xaml code <ComboBox x:Name="ComboboxState" Grid.Column="1" Grid.Row="2" VerticalAlignment="Center" Width="120" HorizontalAlignment="Left" ToolTip="Enter your state." ItemsSource="{Binding Get_States, RelativeSource={RelativeSource AncestorType=Window, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Name" SelectedValuePath="Abbreviation"/>
Что я уже пробовал:
загрузка таблицы данных, но вместо этого вы хотите использовать этот интерфейс
Graeme_Grant
Что говорит вам отладочный вывод?
M.Kamran Asim
Проблема в вашем коде заключается в том, что Get_States-это частная переменная. Вам нужно создать общественную собственность. Связывание происходит только с публичной собственностью. Для получения полного решения см. мое опубликованное решение
Graeme_Grant
public List<US_State> AllUSStates {...}
..- это не проблема... ItemsSource="{Binding Get_States...
должно быть ItemsSource="{Binding AllUSStates...
.. на выходе отладчика есть ответ, вот почему я спросил...
M.Kamran Asim
Собственность AllUSStates находится не в том месте. Почему вы используете класс US_State для многоцелевого использования. US_State действует только как модель, которая является сигнатурой того, как вы храните данные.
в то время как AllUSStates содержит данные о состояниях. Это свойство должно быть частью ViewModel, но в вашем случае оно должно быть частью windows.cs.
Чтобы переместить данный объект на файл MainWindow, и сохранить US_State просто. Этот класс будет содержать только атрибуты (общедоступные свойства).