【发布时间】:2011-05-17 20:35:56
【问题描述】:
我在 TabControl 中有几个 Telerik RadGridViews。
每个 RadGridView 都有一个包含 CheckBox 的列。该列的标题是一个 CheckBox。当用户单击表头中的 CheckBox 时,列中的 CheckBox 会相应地被选中或取消选中。
CheckBoxes 的选中/取消选中适用于默认选中的选项卡中的 RadGridView。
选中/取消选中在默认情况下未选中的选项卡中的任何 RadGridView 中都不起作用。当您返回默认选择的选项卡时,它仍然有效。
我复制了标题中的 CheckBox 并将其放在 RadGridView 上方,切换选项卡后它可以正常工作...如果您选中/取消选中此 CheckBox,它将选中/取消选中网格中的所有 CheckBox ...但是 Header 中的 CheckBox 不起作用。
如果页面加载时 Grid 不可见,则几乎就像未应用 Grid 标题中 CheckBox 的绑定一样......
我想知道是否有人知道如何解决这个问题。
<TablControl>
<TabItem Header="Items">
<telerik:RadGridView x:Name="GridA" AutoGenerateColumns="False" ItemsSource="{Binding MyItems}">
<telerik:RadGridView.Columns>
<telerik:GridViewBoundColumnBase>
<telerik:GridViewBoundColumnBase.Header>
<CheckBox IsChecked="{Binding ElementName=TheElementBoundToTheViewModel, Path=DataContext.SelectAllMyItems, Mode=TwoWay}" />
</telerik:GridViewBoundColumnBase.Header>
<telerik:GridViewBoundColumnBase.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsSelected}"></CheckBox>
</DataTemplate>
</telerik:GridViewBoundColumnBase.CellTemplate>
</telerik:GridViewBoundColumnBase>
<!-- ...... other stuff ..... -->
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</TabItem>
<TabItem Header="ItemsB">
<telerik:RadGridView x:Name="GridB" AutoGenerateColumns="False" ItemsSource="{Binding MyItemsB}">
<telerik:RadGridView.Columns>
<telerik:GridViewBoundColumnBase>
<telerik:GridViewBoundColumnBase.Header>
<CheckBox IsChecked="{Binding ElementName=TheElementBoundToTheViewModel, Path=DataContext.SelectAllMyItems, Mode=TwoWay}" />
</telerik:GridViewBoundColumnBase.Header>
<telerik:GridViewBoundColumnBase.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsSelected}"></CheckBox>
</DataTemplate>
</telerik:GridViewBoundColumnBase.CellTemplate>
</telerik:GridViewBoundColumnBase>
<!-- ...... other stuff ..... -->
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</TabItem>
</TabControl>
这是我的 ViewModel:
Public Class MyItemsVM
Inherits ViewModelBase
Private _selectAllMyItems As Boolean
Public Property MyItems As ObservableCollection(Of MyItemSelectionVM)
Public Property SelectAllMyItems As Boolean
Get
Return _selectAllMyItems
End Get
Set(ByVal value As Boolean)
_selectAllMyItems = value
For Each ivm In MyItems
ivm.IsSelected = _selectAllMyItems
Next
MyBase.RaisePropertyChangedEvent(Me, SelectAllMyItemsChanged)
End Set
End Property
Private _selectAllMyItemsB As Boolean
Public Property MyItemsB As ObservableCollection(Of MyItemSelectionVM)
Public Property SelectAllMyItemsB As Boolean
Get
Return _selectAllMyItemsB
End Get
Set(ByVal value As Boolean)
_selectAllMyItemsB = value
For Each ivm In MyItemsB
ivm.IsSelected = _selectAllMyItemsB
Next
MyBase.RaisePropertyChangedEvent(Me, SelectAllMyItemsBChanged)
End Set
End Property
Public Sub New(ByVal items As MyItemList,ByVal itemsB As MyItemList)
MyItems = New ObservableCollection(Of MyItemSelectionVM)
For Each item In items
MyItems.Add(New MyItemSelectionVM(item))
Next
MyItemsB = New ObservableCollection(Of MyItemSelectionVM)
For Each item In itemsB
MyItemsB.Add(New MyItemSelectionVM(item))
Next
End Sub
End Class
Public Class MyItemSelectionVM
Implements INotifyPropertyChanged
Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Private _isSelected As Boolean
Private _item As MyItem
Public Property MyItem As MyItem
Get
Return _item
End Get
Set(ByVal value As MyItem)
_item = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("MyItem"))
End Set
End Property
Public Property IsSelected As Boolean
Get
Return _isSelected
End Get
Set(ByVal value As Boolean)
_isSelected = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("IsSelected"))
End Set
End Property
Public Sub New(ByVal theItem As MyItem)
_item = theItem
End Sub
End Class
感谢您的帮助
-弗林尼
【问题讨论】: