Как связать ComboBox или ComboboxEdit с таблицей данных - PullRequest
1 голос
/ 16 ноября 2009

Может ли кто-нибудь помочь мне установить значения редактирования в выпадающем списке или в выпадающем списке? В WinForms это было примерно так:

DataSet dataBases = GetDatabases();

if ((dataBases != null) && (dataBases.Tables[0].Rows.Count > 0))
{
    comboBoxDataBases.DisplayMember = "DbName";
    comboBoxDataBases.DataSource = dataBases.Tables[0];

    if (comboBoxDataBases.FindStringExact(tempDBName) > 0)
    {
        comboBoxDataBases.SelectedIndex = comboBoxDataBases.FindStringExact(tempDBName);
    }
}
else
{
    comboBoxDataBases.DataSource = null;
}

Как я могу сделать ту же функциональность с WPF?

Может кто-нибудь опубликовать простой пример. Заранее спасибо.

1 Ответ

0 голосов
/ 16 ноября 2009

Вот как это сделать в WPF:

<ComboBox
  ItemsSource="{Binding DbTable}" <!-- Get the data from the DataContext -->
  SelectedValuePath="{Binding DbName}" <!-- Only desirable if you want to select string values, not table rows -->
  SelectedValue="{Binding tempDBName, Mode=OneWay}" > <!-- Initialize value -->

  <ComboBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding DbName}" /> <!-- Display the DbName in the dropdown -->
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>

Предполагается, что для DataContext задан объект, содержащий таблицу, что для типичного проекта WPF будет выполнено с помощью содержащего шаблона, или если на верхнем уровне - код:

this.DataContext = new
{
  DbTable = dataBases.Tables[0],
  ...
};

Также вы можете удалить Mode=OneWay из XAML выше и позволить изменениям в ComboBox обновить свойство «tempDbName». В целом это приводит к более чистой реализации.

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