我正在尝试获取DataGridComboBoxColumn
(或DataGridTemplateColumn
和ComboBox
)来填充端口列表,并将每行默认为已存储在数据库中的端口。我有一个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个小时就这么做了! :(
非常感谢
答案 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