Привязать исходный код ComboBox к ViewModel (mvvm wpf) - PullRequest
0 голосов
/ 16 января 2019

это мой код (моя ViewModel:

                        NamesDB.Open();
                        string NamesCommand = "SELECT * FROM [Country]";
                        OleDbDataAdapter dr = new OleDbDataAdapter(new OleDbCommand(NamesCommand, NamesDB));
                        DataSet ds = new DataSet();
                        dr.Fill(ds);
                        var empList = ds.Tables[0].AsEnumerable().Select(dataRow => new Country { Name = dataRow.Field<string>("NameCountry")}).ToList();
                        Countries = empList;
                        NamesDB.Close();


    public List<Country> Countries { get; set; }

    public class Country
    {
        public string Name { get; set; }
    }

Я читаю целый столбец из базы данных и сохраняю его в «empList». По крайней мере, это то, что я думаю, я делаю.

У меня есть Combobox и я хочу связать источник с Странами в XAML:

 ItemsSource="{Binding Countries}"

но я не понимаю названия стран и не знаю, что я делаю неправильно

пожалуйста, помогите: (

заранее спасибо

1 Ответ

0 голосов
/ 16 января 2019

Я думаю, это то, чего вы пытаетесь достичь.

Сначала ваш комбо-бокс должен выглядеть примерно так.

<ComboBox DisplayMemberPath="Name" ItemsSource="{Binding Countries}"></ComboBox>

Модель может выглядеть так:

public class Country
{
    public string Name { get; set; }
}

Тогда ваша viewModel должна выглядеть примерно так:

public class MainWindowViewModel : INotifyPropertyChanged
{

    public MainWindowViewModel()
    {
        GetData();
    }

    private List<Country> _countries;

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public List<Country> Countries
    {
        get => _countries;
        set
        {
            _countries = value;
            OnPropertyChanged();
        }

    }

    private void GetData()
    {
        // call database here
        var countries = new List<Country>()
        {
            new Country() {Name = "Usa"},
            new Country() {Name = "Mexico"},
        };

        Countries = countries;
    }
}public class MainWindowViewModel : INotifyPropertyChanged
{

    public MainWindowViewModel()
    {
        GetData();
    }

    private List<Country> _countries;

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public List<Country> Countries
    {
        get => _countries;
        set
        {
            _countries = value;
            OnPropertyChanged();
        }

    }

    private void GetData()
    {
        // call database here
        var countries = new List<Country>()
        {
            new Country() {Name = "Usa"},
            new Country() {Name = "Mexico"},
        };

        Countries = countries;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...