2017-02-13 20 views
0

DataGridComboBoxColumnDataGridTemplateColumnComboBox)は、ポートのリストを作成し、各行をデータベースに既に格納されているポートにデフォルト設定しようとしています。 DataGridTemplateColumnComboBoxが入っていますが、すでにデータベースに格納されているものを選択することはできません。GridのDataGridComboBoxをSelectedItemに移植する

私はEntity Frameworkを使用していますが、私は2つのテーブル 'Route'と 'Port'を持っています。 'Route'には 'Destination Port'と 'Arrival Port'の2つの外部キーがあります。

私は2つのObervableCollectionを持っています.1つはポートのリスト用で、もう1つはルートリスト用です。ルートコレクションには、それぞれ目的地/到着のための「Port1」と「Port2」があります。私はそれだけで使用可能なポートを一覧表示し、それ以外の場合は空白になっていると述べたよう

<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

「ポート1」がDataGridさんItemsコレクション内のアイテムの財産であると考えられる。それは、PortクラスのPortIdプロパティと同じ型を持つ必要があります。

で、デフォルトの要素の DataContext

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

:あなたは、このようにそれに直接SelectedValueプロパティをバインドすることができます

DataGridTemplateColumnのは、DataGridItems/ItemsSourceコレクションの対応する項目です。 Port1プロパティのタイプがある場合PortあなたがSelectedValueの代わりにSelectedItemプロパティを使用する必要があること

注:

<ComboBox ItemsSource="{Binding DataContext.PortCollection, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
            DisplayMemberPath="PortName" 
            SelectedItem="{Binding Port1}"> 
関連する問題