如何在不移动到datagrid中的下一个单元格的情况下提交编辑

时间:2013-10-09 05:40:26

标签: c# wpf

我在CellEditingTemplate的DataGrid中使用ComboBox。 我将所选项目插入到同一单元格中的文本块中,该单元格位于CellTemplate中。只有当我移动到下一个单元格时才会发生插入。

我想要的是当我从ComboBox中选择项目时,它应该将它插入到TextBlock中 没有移动到下一个单元格。

这是我的xaml。

        <DataGrid.Columns>
            <DataGridTextColumn Header="Hours"  Binding="{Binding time}" FontSize="14" FontWeight="Bold" IsReadOnly="True"  Width="100"/>


            <DataGridTemplateColumn Header="Monday" Width="100">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel >
                            <TextBlock x:Name="mon" Text="{Binding Path=SelectedSubject}"></TextBlock>
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <!--<ComboBox x:Name="monday" Width="50"   IsSynchronizedWithCurrentItem="true"   Loaded="monday_Loaded" SelectionChanged="monday_SelectionChanged"></ComboBox>-->
                            <ComboBox x:Name="monday" Width="50" ItemsSource="{Binding Path=Subjects}" SelectedItem="{Binding Path=SelectedSubject}"  IsSynchronizedWithCurrentItem="true"   Loaded="monday_Loaded" SelectionChanged="monday_SelectionChanged"></ComboBox>

                            <ComboBox x:Name="staff" Width="50" Loaded="staff_Loaded"></ComboBox>
                        </StackPanel>
                    </DataTemplate>

                </DataGridTemplateColumn.CellEditingTemplate>

有可能这样做吗?

如果有人知道怎么做,请帮助我。

2 个答案:

答案 0 :(得分:3)

抱歉,我使用了上面的代码,但它没有给出完美的答案。 使用星期一组合框的鼠标离开事件并在该事件中提交编辑它将正常工作。 :)

private void monday_MouseLeave(object sender, MouseEventArgs e)
    {
        this.myGrid.CommitEdit();
    }

答案 1 :(得分:0)

如果您为DataGrid添加了名称,则可以从monday_SelectionChanged访问该名称并提交修改:

<Grid x:Name="myGrid" ....>

在ComboBox选择的处理程序中更改了事件

private void monday_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    myGrid.CommitEdit();

    // Rest of your implementation ....
}