Ну раз никто не отвечает, то отвечу я) Visual Studio запускать не охота, поэтому буду так отвечать. Возможно где-то опечатаюсь)
1. Ну во-первых - это уже вопросы не данного форума. Это вопросы по чистому WPF - есть много других форумов хороших, где объяснят лучше
2.
this.DataContext = data; - на мой взгляд вы полезли в дебри, которые вам (по опыту) вообще не пригодятся. DataContext для всего окна нужно использовать, когда у вас все окно будет "привязано" к определенному классу. И это касается не только данных, но и событий и прочего. Вам это не нужно
3. У вас два ComboBox - первый сделан правильно, второй - НЕТ! Поэтому и не работает. Чтобы использовать binding нужно для ComboBox задать ItemTemplate. Чтобы заполнить потом этот ComboBox, то
нужно задать коллекцию для свойства ItemSource. В вашем случае должно быть так:
<ComboBox x:Name="CmbxFrom" Grid.Row="1" Margin="10">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text={Binding NameL}></TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Ну и заполнение:
this.CmbxFrom.ItemSource = data;
Кстати, перед Name не обязательно писать x: - если честно, я даже не помню для чего это нужно))
4.
UpdateSourceTrigger=PropertyChanged вам также не нужно. Это требуется обычно для двусторонней связи (еще нужно свойство Mode задать). Причем в этом случае в вашем классе DtCombo должна быть реализация PropertyChanged. По этому поводу можно много найти примеров в интернете. Но если вам ComboBox нужен только чтобы отобразить данные, без передачи обратно в класс (повторюсь - на практике для функций автокада этого достаточно), то всякие PropertyChanged и пр. вам не нужны
5. Чтобы потом написать в командную строку что выбрано в ComboBox, достаточно это
ed.WriteMessage("\nCurrent layer :" + _dcombo.NameL); заменить на примерно это
ed.WriteMessage("\nCurrent layer :" + _dcombo.CmbxFrom.SelectedItem.ToString());В данном случае _dcombo.CmbxFrom.SelectedItem будет возвращать вам экземпляр класса DtCombo. Т.е. можете еще так сделать:
var selectedLayer = _dcombo.CmbxFrom.SelectedItem as DtCombo;
d.WriteMessage("\nCurrent layer :" + selectedLayer.NameL);
6. Дальше смотреть не стал) Вы в проект запихиваете варианты из разных примеров, найденных в интернете - много лишнего) Старайтесь лишнего не писать/копировать - только запутаете