我有一个带有datagridComboBoxColumn的数据网格。 datagrid的items源是一个名为Products的自定义类,它有一个名为Installer的属性(也是一个名为Contact的自定义类)。
我想将datagridComboBoxColumn itemsSource绑定到所有Contacts,并将comboBox的选定值绑定到Installer。这不行,有人可以帮我一把吗?提前致谢
非常感谢。我看过其他类似的帖子(例如this one或this one),但情况并不完全相同。
我的xaml代码:
<DataGrid x:Name="productsList" AutoGenerateColumns="False" IsReadOnly="True" CanUserResizeRows="False"
CanUserResizeColumns="True" ColumnWidth="*" GridLinesVisibility="None">
<DataGrid.Columns>
<DataGridTextColumn Header="Ref"
Binding="{Binding Ref}"
/>
<DataGridTextColumn Header="Product"
Binding="{Binding Product}"
/>
<DataGridComboBoxColumn Header="Installer" SelectedItemBinding="{Binding Installer, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding Contacts}"/>
</DataGrid.Columns>
</DataGrid>
我的代码隐藏:
public partial class CatalogPage : Page
{
ObservableCollection<CatalogProduct> mProductList = new ObservableCollection<CatalogProduct>();
public ObservableCollection<Contact> Contacts
{
get
{
return Parent.mContactsPage.GetContacts();
}
}
private LocalConfigurationPage Parent { get; set; }
public CatalogPage(LocalConfigurationPage localConfigurationPage)
{
InitializeComponent();
Parent = localConfigurationPage;
productsList.ItemsSource = mProductList;
}
}
这是CatalogProduct类:
public class CatalogProduct
{
public string Ref { get; set; }
public string Product { get; set; }
public Contact Installer { get; set; }
}
答案 0 :(得分:0)
你在这里做错了很多事。
MyFoo
出现在Contacts
中,因此,CatalogPage
无效。这是因为{Binding Contacts}
的{{1}}是为该行显示的DataContext
。对于您的行,它将是DataGridRow
,并且那里没有Item
。
相反,你必须这样做:
CatalogProduct
其次,Contacts
存在已知问题,因此请始终使用:
ItemsSource="{Binding DataContext.Contacts, RelativeSource={RelativeSource AncestorType=DataGrid}}
最后,如果您要更新DataGridComboBoxColumn
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox SelectedItem="{Binding Installer, UpdateSourceTrigger=PropertyChanged}}" ItemsSource="{Binding DataContext.Contacts, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
值,请为ComboBoxColumn
实施更改通知,并为Installer
设置Installer
}。否则,现在它将起作用Mode=TwoWay
而不是相反。