Страницы

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

пятница, 10 января 2020 г.

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

#wpf #bindingsource


Приветствую, народ!
Мой вопрос заключается в следующем:
Есть форма 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 срабатывает, когда меняется выделенный айтем, но если я
выбираю другой объект и мне нужно для него поставить такой же тип как и в прошлом -
оно не генерится.
Хотелось бы сделать все на более высоком уровне.
Гуглила, искала, но ничего конкретного для выполнения этой задачи не нашла.

    


Ответы

Ответ 1



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

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

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