在Silverlight中将Combobox添加到DataGrid

时间:2010-05-26 08:30:17

标签: silverlight datagrid combobox

我可以使用以下xmal:

将Combobox添加到DataGrid
 <local:DataGridTemplateColumn Header="SomeHeader" Width="106" HeaderStyle="{StaticResource headerAlignRightStyle}" CellStyle="{StaticResource cellAlignRightStyle}">
                    <local:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding SomeProp}" Margin="4"/>
                        </DataTemplate>
                    </local:DataGridTemplateColumn.CellTemplate>
                    <local:DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <ComboBox 
                              x:Name="SomeCombo"
                              SelectionChanged="SomeCombo_SelectionChanged"
                              ItemsSource="{Binding SomeList}"
                              DisplayMemberPath="Name" 
                              />
                        </DataTemplate>
                    </local:DataGridTemplateColumn.CellEditingTemplate>
                </local:DataGridTemplateColumn>

然而,我无法弄清楚是获得combox行的明智方法 势必。即在处理组合框SelectionChanged事件时,我无法知道什么 组合框属于哪一排。特别是我不知道DataGrid数据源中的对象是什么 组合框所指的是。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

你可以

A)使用双向绑定将ComboBox的SelectedItem属性绑定到ViewModel / data模型中的属性,因此您不必首先担心SelectionChanged

B)在SelectionChanged处理程序中使用DataGridRow.GetRowContainingElement(element),即

private void SomeCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var comboBox = sender as ComboBox;
    if (comboBox == null)
        return;
    var row = DataGridRow.GetRowContainingElement(comboBox);
    // Do something with row...
}

干杯,亚历克斯

答案 1 :(得分:1)

如果您只想获取行所绑定的项目,您只需阅读发件人的DataContext:

private void SomeCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var item = sender as FrameworkElement;
    if (item== null)
        return;
    var source = item.DataContext;
}

答案 2 :(得分:0)

据我所知,当你点击组合框时,该行应该得到焦点。这也意味着数据网格知道所选项目。

如果您要查找所选对象,则应该可以使用datagridName.SelectedItem访问该对象。这将返回所选对象。

请测试并评论解决方案,因为我现在无法检查答案。