繁体   English   中英

在Silverlight中将组合框添加到DataGrid

[英]Adding a Combobox to a DataGrid in Silverlight

我可以使用以下xmal将组合框添加到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数据源中的哪个对象。

任何帮助将非常感激。

你可以

A)使用双向绑定将ComboBox的SelectedItem属性绑定到ViewModel /数据模型中的属性,因此您不必首先担心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...
}

干杯,亚历克斯

如果您只是想获取该行绑定的项目,则可以读取发送者的DataContext:

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

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

如果要查找选定的对象,则应该使用datagridName.SelectedItem对其进行访问。 这将返回所选对象。

请对其进行测试,并对解决方案发表评论,因为我现在无法检查答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM