使用SelectedItem

时间:2017-02-13 16:28:45

标签: c# wpf entity-framework xaml data-binding

我正在尝试获取DataGridComboBoxColumn(或DataGridTemplateColumnComboBox)来填充端口列表,并将每行默认为已存储在数据库中的端口。我有一个DataGridTemplateColumn,其中ComboBox填充了端口,但我似乎无法选择已存储在数据库中的内容。

我使用的是Entity Framework,我有2个表,' Route'和#'港口' '路线'有2个外键用于“目的地端口”和#39;和一个到达港口'。

我有2个ObervableCollections,一个用于端口列表,另一个用于路由列表。在路线集合中有一个' 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 个答案:

答案 0 :(得分:1)

&#34;端口1&#34;应该是DataGrid Items集合中该项的属性。它应该与PortId类的Port属性具有相同的类型。

然后,您可以将SelectedValue属性直接绑定到它:

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

DataContext的{​​{1}}中元素的默认CellTemplate是父DataGridTemplateColumn / Items集合中的对应项ItemsSource 1}}。

请注意,如果DataGrid属性的类型为Port1,则应使用Port属性而不是SelectedItem

SelectedValue