2017-02-13 10 views
0

Я пытаюсь получить DataGridComboBoxColumn (или DataGridTemplateColumn с ComboBox), чтобы заполнить список портов и по умолчанию каждая строка порта, который уже хранится в базе данных. У меня есть DataGridTemplateColumn с ComboBox, заполняющим порты, но я не могу заставить его выбрать то, что уже хранится в базе данных.Заполнение DataGridComboBox в сетке с SelectedItem

Я использую Entity Framework, и у меня есть 2 таблицы, «Маршрут» и «Порт». «Маршрут» имеет 2 внешних ключа для «Порт назначения» и «Порт прибытия».

У меня есть 2 ObervableCollections, один для списка портов и другой для списка маршрутов. В коллекции маршрутов есть «Порт1» и «Порт2» для назначения/прибытия соответственно.

Это то, что я в настоящее время:

<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <ComboBox ItemsSource="{Binding DataContext.PortCollection, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
              DisplayMemberPath="PortName" 
              SelectedItem="{Binding DataContext.RouteCollection, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
              SelectedValue="{Binding DataContext.Port1, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" 
              SelectedValuePath="PortId"> 
     </ComboBox> 
    </DataTemplate> 
</DataGridTemplateColumn.CellTemplate> 

Но, как я сказал, что это только список доступных портов, а в противном случае пустой. Извините, если я не сделал себя слишком ясным, я не очень хорошо разбираюсь в общем.

Вот мои коллекции:

public ObservableCollection<Port> PortCollection { get; set; } 

//List of Routes 
private ObservableCollection<Route> _RouteCollection; 

public ObservableCollection<Route> RouteCollection 
{ 
    get { return _RouteCollection; } 
    set 
    { 
     _RouteCollection = value; 
     Set(() => RouteCollection, ref _RouteCollection, value); 
    } 
} 

Там явно что-то очевидно не так, как это должно быть вполне обычное дело делать, но я схожу с ума в течение 4-х часов, на это просто получить это далеко! :(

Большое спасибо

ответ

1

«Port1» должен быть свойством элемента в Items инкассо DataGrid «s. Он должен иметь тот же тип, что и PortId свойство Port класса.

Вы можете связать SelectedValue свойство непосредственно к нему, как это:

<ComboBox ItemsSource="{Binding DataContext.PortCollection, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
             DisplayMemberPath="PortName" 
             SelectedValue="{Binding Port1}" 
             SelectedValuePath="PortId"> 

в умолчанию DataContext элемента в CellTemplate от DataGridTemplateColumn соответствует соответствующему элементу в коллекции Items/ItemsSource родителя DataGrid.

Обратите внимание, что если тип Port1 собственности Port вы должны использовать SelectedItem свойство вместо SelectedValue:

<ComboBox ItemsSource="{Binding DataContext.PortCollection, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
            DisplayMemberPath="PortName" 
            SelectedItem="{Binding Port1}"> 

 Смежные вопросы

  • Нет связанных вопросов^_^