我在我的 xaml 中声明一个 datagrid 模板列,如下所示:
<sdk:DataGridTemplateColumn x:Name="MyColumn" Header="User">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
x:Name="comboBox1" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
然后我尝试像这样填充组合框:
DataServiceQuery<SystemUser> query = (DataServiceQuery<SystemUser>)_context.SystemUserSet;
query.BeginExecute(OnUserSearchComplete, query);
(在 InitializeComponent() 行之后运行)
进而:
private void OnUserSearchComplete(IAsyncResult result)
{
var query = result.AsyncState as DataServiceQuery<SystemUser>;
IEnumerable<SystemUser> response = query.EndExecute(result);
ComboBox comboBox1 = (DataGrid.Columns[4] as DataGridTemplateColumn).CellTemplate.LoadContent() as ComboBox;
// Enumerate over the results of the query
foreach (SystemUser record in response)
{
comboBox1.Items.Add(record.FullName);
}
}
但是,当我在 CRM 中运行应用程序时,组合框并没有填充我的系统用户。谁能解释我做错了什么?我现在尝试了几种不同的方法,但我似乎无法让它发挥作用..
谢谢,
杰克
编辑; 调试:
- 响应返回 3 个系统用户对象 - 这是正确的。
- comboBox1 不等于 null。
这是我的网格的布局方式(类似于 SDK 示例):
编辑2; 由于某种原因,我的代码似乎没有进入 foreach 循环,有什么想法吗?
编辑3; 好的,所以使用 Andrew 在下面的回答中提供的信息,我有以下代码:
//Removed for brevity
<sdk:DataGridTemplateColumn x:Name="SalesmanColumn" Header="Salesman" Width="150">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
x:Name="comboBox1"
ItemsSource="{Binding SystemUsers, ElementName=MyUserControl}"
/>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
//Removed for brevity
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</Grid>
不幸的是,我的绑定似乎不起作用,我之所以这么说是因为我使用了一个字符串生成器和一个文本框来存储和显示从 CRM 检索到的用户名,并且它们都被正确检索了,但是他们没有'不会出现在组合框中。谁能解释为什么我的绑定不正确?