Страницы

Поиск по вопросам

вторник, 26 февраля 2019 г.

Связать Combobox с колонкой dataGrid wpf

Приветствую, народ! Мой вопрос заключается в следующем: Есть форма wpf
selectedObjectsDataGrid.ItemsSource = attributesManager.ObjectsInGrid;
Ее сорс - это лист объектов ObjectInGrid
public class ObjectInGrid { private ObjType? type; public Guid Object { get; set; } public ObjType? Type { get { return type; } set { type = value; } }
public ObjectInGrid(Guid obj) { Object = obj; } public enum ObjType { None = 0, Door = 1, Window = 2 } }
В комбобоксе есть три варианта (как в enum ObjType). Объекты поступают в датагрид так: пользователь выделяет один или несколько объектов в документе. по нажатию, грубо говоря, создается объект
public void AddObjectToGrid(Guid id) { ObjectInGrid o = new ObjectInGrid(id); ObjectsInGrid.Add(o); }
Property Type, как и колонка Type пока пустые. когда пользователь добавил все объекты, он выделяет в гриде один или несколько объектов и в комбобоксе выбирает тип.
На событие SelectionChanged комбобокс находит по id элемент в листе-сорсе и заполняет проперти Type.
Я только начала работать с WPF, но предполагаю, что там есть возможность как-то "связать" колонку типа и комбобокс нормальным способом, а не как у меня вручную.
В моем подходе мне не нравится:
Событие SelectionChanged срабатывает, когда меняется выделенный айтем, но если я выбираю другой объект и мне нужно для него поставить такой же тип как и в прошлом - оно не генерится. Хотелось бы сделать все на более высоком уровне. Гуглила, искала, но ничего конкретного для выполнения этой задачи не нашла.


Ответ

Окей, судя по всему, вам нужно вот что:




Вроде бы code-behind не нужен вовсе. Но вам нужно установить правильный DataContext

Да, ещё одна проблема вашего кода: ваша ViewModel (то есть, класс, к которому будет Binding), а именно, класс ObjectInGrid, не реализует интерфейс INotifyPropertyChanged. Это важно, обязательно имплементируйте его. Иначе работать не будет.

Комментариев нет:

Отправить комментарий