Как заполнить ComboBox данными из таблицы DataGrid

296
13 февраля 2018, 05:20

Здравствуйте всем. Подскажите, пожалуйста, как заполнить ComboBox данными из таблицы DataGrid.

У меня есть два окна. В одном окне у меня есть DataGrid (имя его будет ReaderDataGrid). Это таблица содержит в себе записи о читателях. Теперь мне нужно в другом окне расположить ComboBox (имя его будет OrderComboBox). Этот ComboBox мне нужно заполнить не рандомными значениями, а теми значениями, которые есть в DataGrid (ReaderDataGrid).

В своём проекте я НЕ ИСПОЛЬЗУЮ паттерн MVVM, поскольку данный паттерн для меня слишком сложный в понимании его концепции, хотя не исключаю, что через него мне будет намного проще сделать то, что хочу. Для работы с БД я использую EF.

P.S. Немного дополнил свой пост.

Часть кода первого окна:

public partial class MainWindow
{
    public MainWindow()
    {
        InitializeComponent();
        using (LibraryModelContainer dbContainer = new LibraryModelContainer())
        {
            ReaderDataGrid.ItemsSource = dbContainer.Readers.ToList();
            OrderDataGrid.ItemsSource = dbContainer.Orders.ToList();
            CatalogDataGrid.ItemsSource = dbContainer.Catalogs.ToList();
            BookDataGrid.ItemsSource = dbContainer.Books.ToList();
        }
    }
}

Часть кода второго окна (не обращайте внимание на название CatalogWindow, я там провожу эксперименты):

public partial class CatalogWindow : Window
{
    private readonly MainWindow _window;
    private readonly bool _isAddMode; // Булевское поле для проверки режима операции над записью 
    public CatalogWindow(MainWindow window, bool isAddMode)
    {
        InitializeComponent();
        _window = window;
        _isAddMode = isAddMode;
        if (!_isAddMode)
        {
            AddUpdateButton.Content = "Редактировать";
        }
        using (LibraryModelContainer dbContainer = new LibraryModelContainer())
        {
            ReaderComboBox.ItemsSource = dbContainer.Readers.ToList();
        }
    }
}

Оба окна у меня не диалоговые, хотя второе окно открываю через метод ShowDialog() в MainWindow.xaml.cs:

private void CreateCatalogButton_Click(object sender, RoutedEventArgs e)
{
    CatalogWindow window = new CatalogWindow(this, true);
    window.ShowDialog();
}

В конструкторе окна CatalogWindow я добавил это:

using (LibraryModelContainer dbContainer = new LibraryModelContainer())
{
    ReaderComboBox.ItemsSource = dbContainer.Readers.ToList();
}

Вот теперь вопрос: как мне преобразовать эту коллекцию в объекты класса Reader? Вернее даже не объекты класса Reader, а нужно сделать так, чтобы в ComboBox выводились для объекта Reader свойство Name (ФИО читателя), а через свойство Id класса Reader я мог уже при операции добавления заносить значения этого Id класса Reader в нужный мне объект другого класса. Немного запутанно написал, но суть в том, что нужно сделать аналогично, как если бы я приложение делал не через WPF, а в Windows Forms. Потому что сейчас вот так происходит, и я не понимаю, как сделать явное преобразование из-за недопонимания (или незнания) иерархии наследуемых классов или мб из-за чего-то другого, что мешает мне сделать это без проблем.

READ ALSO
От чего так упала скорость?

От чего так упала скорость?

Добрый день, вопрос скорее теоретический, но очень интересно от чего так получилосьИ если есть предложения, то как бы убыстрить новообразованный...

217
Выбор изображения из галереи MVVMCross

Выбор изображения из галереи MVVMCross

В axml описана кнопка, по клику на кнопку, нужно открыть галерею и передать в ViewModel путь к выбранному изображениюРеализация в рамках MVVMCross, нужен...

157
WPF и присваивание значения из кода

WPF и присваивание значения из кода

Например есть стиль в XAML:

193
Binding static observablecollection<int>

Binding static observablecollection<int>

Доброго времени суток!

222