是否可以在DataGridTemplateColumn中仅编辑一个控件?

时间:2016-10-14 16:39:40

标签: c# wpf datagrid datagridtemplatecolumn

我做了一些研究,但没有找到我的问题的答案。它是:我有一个DataGridTemplateColumn,里面有一个StackPanel和两个TextBlocks。我希望能够只编辑其中一个TextBlock,是否可能?

有我的代码:

    <DataGrid Name="gdProducts"
              MinHeight="100" 
              ItemsSource="{Binding ProductsView, UpdateSourceTrigger=PropertyChanged}"
              SelectedItem="{Binding SelectedProduct, UpdateSourceTrigger=PropertyChanged}"
              AutoGenerateColumns="False"
              GridLinesVisibility="None"
              IsSynchronizedWithCurrentItem="False"
              CanUserAddRows="False"
              CanUserDeleteRows="False">
        <DataGrid.Columns>

            <!-- other columns -->

            <DataGridTemplateColumn Header="Waiting Period"
                                IsReadOnly="False"
                                Width="80">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding WaitingPeriod}"/>
                            <TextBlock Text=" days"/>
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

        </DataGrid.Columns>
    </DataGrid>

编写代码的方式我将编辑两个TextBlocks(整个StackPanel)。那不是我想要的。

谢谢!

修改

对不起,我的错误,实际上我的代码不允许我编辑任何东西。我认为将IsReadOnly设置为False将允许它像其他DataGrid列类型一样可编辑。

1 个答案:

答案 0 :(得分:1)

只需将TextBox而不是TextBlock用于要编辑的属性:

  <StackPanel Orientation="Horizontal">
         <TextBox Text="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.WaitingPeriod}"/>
         <TextBlock Text=" days"/>
   </StackPanel>

RelativeSource将您的可视化树带到DataGrid,DataGrid DataContext是您的ViewModel,这就是您可以访问WaitingPeriod属性的原因。