2011-05-17 20 views
0

我有一個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

回答

0

我通過查看模型製作一個靜態資源解決了這個問題。綁定到靜態資源而不是元素的DataContext解決了問題。