【发布时间】:2012-04-05 08:16:48
【问题描述】:
我有一个数据网格,它的 ItemsSource 是一个强类型的 IEnumerable 对象
在这个数据网格中,我有一个复选框列、一个价格列、一个零件名称列和一个“总销售额”列。
选中复选框后,我需要使用价格列中的值更新列的总销售额。
这部分我正在工作,但是,当发生这种情况时,如何让复选框保持选中状态?
Private Sub UpdateSellFor(sender As System.Object, e As System.Windows.RoutedEventArgs)
Dim _CB As CheckBox = DirectCast(sender, CheckBox)
Dim _ID As Integer = _CB.Tag
Dim _PP = DirectCast(DG_PartsToSelect.CurrentItem, PartTyping).PartPrice
If _CB.IsChecked Then
DG_PartsToSelect.CurrentItem.PartSellingFor = DirectCast(DG_PartsToSelect.CurrentItem, PartTyping).PartPrice
DG_PartsToSelect.Items.Refresh()
Else
End If
'_CB.IsChecked = True
End Sub
取消注释 _CB.IsChecked = True 什么都不做
这是此数据网格的 XAML:
<DataGrid IsReadOnly="True" AutoGenerateColumns="False" Grid.Column="1" HorizontalAlignment="Stretch" Margin="3" Name="DG_PartsToSelect" VerticalAlignment="Stretch">
<DataGrid.Columns>
<DataGridTextColumn Header="Part ID" Binding="{Binding PartID}" />
<DataGridTemplateColumn Header="Part Name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding PartName}" Cursor="Hand" MouseDown="PartDetails" Tag="{Binding PartID}" ToolTip="Click to See the Part Details" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Selling For" Binding="{Binding PartPrice, StringFormat='{}{0:C}'}" />
<DataGridTemplateColumn Header="Part Options">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Cursor="Hand" Height="22" Name="options" Tag="{Binding PartID}" MouseDown="PartOptions" Source="/v2Desktop;component/Images/Application.png" ToolTip="Select Part Options" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Sell This Part">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="SelectedPart" Tag="{Binding PartID}" ToolTip="Select This Part" Click="UpdateSellFor" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Total Selling For" Binding="{Binding PartSellingFor, StringFormat='{}{0:C}'}" />
</DataGrid.Columns>
</DataGrid>
【问题讨论】:
-
只是猜测,但您是否在 CellTemplate 的 TemplateColum 中意外创建了 TextBox,否则请提供一些 xaml。想一想;请务必提供 xaml。
-
复选框是一个模板,是的,但不是 Total Selling For
-
大多数情况下发生的情况是,没有例如 CellEditingTemplate 的 CellTemplate 中的复选框在检查为 false 时重置,因为查看您的方法让我假设您没有对中的复选框进行绑定你的xml。
-
不是正式的没有。但是 .Tag 是绑定的
-
我建议您将 IsCalculated DependencyProperty 添加到 Binded 类并将 CheckBox 绑定到该类。在 PropertyChangedCallbackHandler 中,您可以使用
DependencyObject d作为您的项目来更新该行的价格。如果你想要一个例子,请告诉我。
标签: .net wpf vb.net datagrid wpfdatagrid