是否可以在 DataGridTemplateColumn 中只编辑一个控件?
Is it possible to edit only one control in DataGridTemplateColumn?
我做了一些研究,但没有找到我的问题的答案。就是这样:我有一个 DataGridTemplateColumn,里面有一个 StackPanel 和两个 TextBlock。我只想编辑其中一个 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 列类型一样进行编辑。
只需使用 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 的原因 属性。
我做了一些研究,但没有找到我的问题的答案。就是这样:我有一个 DataGridTemplateColumn,里面有一个 StackPanel 和两个 TextBlock。我只想编辑其中一个 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 列类型一样进行编辑。
只需使用 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 的原因 属性。