我有一個TabControl內的幾個Telerik RadGridViews。RadGridView的標題綁定內的組合框打破切換標籤後
這些RadGridView中的每一個都有一個帶有CheckBoxes的列。此列的標題是CheckBox。當用戶單擊標題中的複選框時,列中的複選框相應地被選中或取消選中。
CheckBoxes的檢查/取消選中適用於選項卡中的RadGridView,默認情況下,該選項卡處於選中狀態。
在默認情況下未選中的選項卡中的任何RadGridView中,檢查/取消選中不起作用。當您返回到默認選中的選項卡時,它仍然有效。
我拿了一個CheckBox的副本,放在頭上,放在RadGridView的上面,它在切換標籤後工作正常......如果您選中/取消選中此複選框,它將檢查/取消選中所有CheckBoxes網格...但標題中的複選框不起作用。
這是幾乎一樣,如果在沒有應用網格的標頭將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
感謝您的幫助
-Frinny