то ваш итоговый объект буклет рассматриваться системой как объект GrandFather. Вы же сами написали, что gf - это GrandFather. Он при этом может по факту являться объектом GrandSon, потому что этот класс унаследован от GrandFather, но вы явно указали, объектом какого класса надо рассматривать ваш gf.
Поэтому либо вы меняете объявление и говорите системе, что ваш объект надо рассматривать как GrandSon, либо делаете явное приведение перед вызовом метода. Как вам совершенно верно и подсказали.
Сами компоненты закреплены винтами, конечно. Тут отвёртка пригодится. Но например чтобы просто хорошо продуть вентилятор или заменить память, она не нужна.
Был до этого Elitebook 8470p два года, с аналогичной системой разборки, никаких проблем с конструкцией не испытывал. Снимается только нижняя крышка, которая открывает доступ только к основным компонентам, но всё перечисленное в этот список входит - RAM, M.2 SSD, HDD, батарея, охлаждение, wi-fi и опциональный WWAN.
Тоже хотел бы взглянуть на код конвертера. Хотя, даже может и не в нём дело. XAML-дизайнер работает через рефлексию и очень часто может ругаться некорректно, но до первого билда.
Пользователь может просто раздвинуть ручками на нужную ширину. Хотя мне задача всё менее понятна. Что конкретно должно происходить с обоими GridView при изменении размера одного или другого?
Ну тогда привяжите все их SelectedItem к одному полю в модели, только в set { } этого поля только обрабатывайте значение, а потом не вызывайте PropertyChanged().
Если на EliteBook 840 прицепить на днище дополнительную батарею, получится чуть больше 2 кг, но автономии (по заявлению производителя) - больше раза в полтора-два от требуемой :)
FullHD-модели есть (главное внимательно выбирать при покупке и взять UWVA, то есть IPS панель, а не SVA, который на самом деле обычный TN). SSD докупается, но есть и модели с 512 Гб (хотя мне больше нравится вариант 256 Гб SSD M.2 + 2 ТБ HDD). Broadwell нету, но Haswell вполне. Вес без дополнительной батареи 1.8 кг.
SelectedItem запоминать бесполезно, оно назад не свяжется :)
Лучше запоминать Id выбранной позиции. В модели сделать свойстве SelectedIndex (с INPC). После обновления коллекции искать индекс элемента в коллекции по Id и изменять значение SelectedIndex на найденное значение индекса, если элемент всё ещё есть в коллекции, или на 0, если его уже нет.
Просто вы делаете это the way it not supposed to work.
Правильным будет сделать так:
1. Загружать ваши данные через Entity Framework в ObservableCollection и связывать с таблицей в UI
2. Связать SelectedItem вашей таблицы с отдельным объектом Entity-класса
3. При нужном событии производить валидацию объекта (по мере надобности) и передавать значения конкретных полей в нужном направлении.
Когда вы пишете:
GrandFather gf = new GrandSon();
то ваш итоговый объект буклет рассматриваться системой как объект GrandFather. Вы же сами написали, что gf - это GrandFather. Он при этом может по факту являться объектом GrandSon, потому что этот класс унаследован от GrandFather, но вы явно указали, объектом какого класса надо рассматривать ваш gf.
Поэтому либо вы меняете объявление и говорите системе, что ваш объект надо рассматривать как GrandSon, либо делаете явное приведение перед вызовом метода. Как вам совершенно верно и подсказали.