ComboBox в привязке заголовка RadGridView ломается после переключения вкладок - PullRequest
0 голосов
/ 18 мая 2011

У меня есть несколько Telerik RadGridViews в TabControl.

Каждый из этих RadGridViews имеет столбец с CheckBoxes в. Заголовок для этого столбца - CheckBox. Когда пользователь щелкает CheckBox в заголовке, флажки внутри столбца соответственно отмечаются или не отмечаются.

Проверка / снятие флажка CheckBoxes работает для RadGridView на вкладке, которая по умолчанию выбрана.

Проверка / снятие отметки не работает ни в одном из RadGridView, которые находятся на вкладках, которые не были выбраны по умолчанию. Когда вы вернетесь к вкладке, выбранной по умолчанию, она все равно будет работать.

Я взял копию CheckBox, которая находится в заголовке, и поместил ее над RadGridView, и он работает нормально после переключения вкладок ... Если вы установите / снимите флажок с этого CheckBox, он будет проверять / снимать все флажки в 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

Спасибо за вашу помощь

-Frinny

1 Ответ

0 голосов
/ 18 мая 2011

Я решил проблему, создав статический ресурс для модели представления. Привязка к статическому ресурсу вместо DataContext элемента устранила проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...