То, что вы делаете на вашем Loaded
мероприятии, довольно странно.Я не рекомендовал бы делать это, поскольку это разрушит ваши привязки.Если причина, по которой вы это делаете, заключается в том, что свойство Name
отображается в вашем ComboBox
, вам лучше использовать DataTemplate
.Примерно так:
<Window.Resources>
<DataTemplate x:Key="pntGroupTemplate" DataType="{x:Type ac:PointGroup}">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</Window.Resources>
и вам, конечно же, нужно добавить пространство имен в ваше окно.Примерно так:
xmlns:ac="clr-namespace:Autodesk.Civil.DatabaseServices;assembly=AeccDbMgd"
У меня нет Civil, поэтому не уверен, что это правильно, но это должно быть близко.Intellisense должен быть в состоянии помочь вам с правильным путем, если этот путь не совсем правильный.
и в вашем поле со списком,
<ComboBox ItemTemplate="{StaticResource pntGroupTemplate}" ... />
Мой лучший совет - просто полностью избавиться от всехкод в обработчике событий Combobox1_Loaded
и создайте DataTemplate
в xaml для отображения свойства Name
, используя фрагмент кода выше.И наконец, измените свое лямбда-выражение с этого:
group => group.Name == (string)combo.SelectedItem
на следующее:
group => group.Name == (combo.SelectedItem as PointGroup)?.Name
Исключение, которое вы получаете, связано со второй строкой.Когда вы вызываете метод Select
в событии Loaded, он возвращает IEnumerable<string>
, поэтому, когда вы преобразуете ItemsSource
в List<PointGroup>
, вот где все идет в разные стороны: -).
Другая проблема с тем, что вы делаете, заключается в том, что сейчас SelectedItem
является string
и не имеет свойства Name
.
Надеюсь, что поможет