GridView ComboBox problem

4 posts, 1 answers
  1. Barry
    Barry avatar
    90 posts
    Member since:
    Jul 2011

    Posted 12 Mar 2012 Link to this post

    Hi, I'm trying to get this ComboBoxColumn working and I'm having a bit of trouble. 

    <telerik:GridViewComboBoxColumn  Header="Config Type"
            Width="100"
            SortMemberPath="ConfigType"
            ShowDistinctFilters="True"
            ShowFilterButton="True"
            ShowFieldFilters="False"
            ItemsSource="{Binding ConfigTypes, Source={StaticResource ItemViewModel}}"
            DisplayMemberPath="Key"
            SelectedValueMemberPath="ConfigType"
            DataMemberBinding="{Binding ConfigType}"/>

    ConfigTypes is a property on my ViewModel that returns a list of KeyValuePair items  which may be the problem here...

    Public ReadOnly Property ConfigTypes
               Get
                   Dim tmp = Mcpic.Core.Common.Converter.EnumToKeyValueList(ItemConfigType.Operational)
                   Return tmp
               End Get
           End Property


    The items display in the ComboBox correctly, but I can't get the selected item to reflect the value of the ConfigType property.

    Any idea what I'm doing wrong?
  2. Pavel Pavlov
    Admin
    Pavel Pavlov avatar
    2039 posts

    Posted 12 Mar 2012 Link to this post

    Hi Barry ,

    Please try the following :

    SelectedValueMemberPath
    ="Value"

    In case this does not help , please paste me the ViewModel implementation so we can seek for the cause of the problem further.

    Kind regards,
    Pavel Pavlov
    the Telerik team
    Sharpen your .NET Ninja skills! Attend Q1 webinar week and get a chance to win a license! Book your seat now >>
  3. DevCraft banner
  4. Barry
    Barry avatar
    90 posts
    Member since:
    Jul 2011

    Posted 12 Mar 2012 Link to this post

    Thanks for the quick reply.  I had tried that and it does not work either.

    The ViewModel is as follows:

    Public Class TechDataItemViewModel
            Inherits EquipmentMgmtViewModelBase
            Implements IRegionContext
     
            Private regionManager As IRegionManager
     
    #Region " Events "
            Public Event Loaded()
    #End Region
     
    #Region " Constructors "
     
            Public Sub New()
                If Not IsDesignTime Then
                    Me.regionManager = ServiceLocator.Current.GetInstance(Of IRegionManager)()
                    'Refresh()
                    WireCommands()
                End If
            End Sub
     
            Public Sub New(src As ItemTechData)
                If Not IsDesignTime Then
                    Me.regionManager = ServiceLocator.Current.GetInstance(Of IRegionManager)()
                    Item = src
                    Item.AcceptChanges()
                    WireCommands()
                End If
            End Sub
     
    #End Region
     
    #Region " Properties "
     
            Public ReadOnly Property ConfigTypes
                Get
                    Return Mcpic.Core.Common.Converter.EnumToKeyValueList(ItemConfigType.Operational)
                End Get
            End Property
     
            Public ReadOnly Property IsReadOnly As Boolean
                Get
                    Return If(itemValue Is Nothing, False, itemValue.IsReadOnly)
                End Get
            End Property
     
            Private itemValue As ItemTechData
            Public Property Item() As ItemTechData
                Get
                    Return itemValue
                End Get
                Private Set(ByVal value As ItemTechData)
                    If value IsNot itemValue Then
                        itemValue = value
                        If itemValue IsNot Nothing Then
                            AddHandler itemValue.PropertyChanged, AddressOf ItemPropertyChanged
                        End If
                        Refresh()
                        MyBase.RaisePropertyChanged(BL.Props.Item)
                        MyBase.RaisePropertyChanged(BL.Props.IsDirty)
                        MyBase.RaisePropertyChanged(BL.Props.IsReadOnly)
                    End If
                End Set
            End Property
     
            Private configValue As New TrackableCollection(Of ItemConfig)
            Public ReadOnly Property Configs() As TrackableCollection(Of ItemConfig)
                Get
                    Return configValue
                End Get
                'Set(ByVal value As TrackableCollection(Of ItemConfig))
                '    If value IsNot configValue Then
                '        configValue = value
                '        MyBase.RaisePropertyChanged(BL.Props.Configs)
                '        MyBase.RaisePropertyChanged(BL.Props.IsDirty)
                '    End If
                'End Set
            End Property

    And here is the ItemConfig class
    <DataContract()>
        Public Class ItemConfig
            Inherits ModelBase
     
            Public Sub New()
                Me.AcceptChanges()
            End Sub
     
    #If SILVERLIGHT = 0 Then
            Public Sub New(src As Entities.ItemConfig)
                ItemConfigId = src.ItemConfigId
                Niin = src.Niin
                Length = src.Length
                Width = src.Width
                Height = src.Height
                Weight = src.Weight
                ConfigType = src.ConfigType
                CreatedDt = src.CreatedDt
                ModifiedDt = src.ModifiedDt
                CreatedId = Identifier.GetNewUser(src.CreatedId, src.CreatedName)
                ModifiedId = Identifier.GetNewUser(src.ModifiedId, src.ModifiedName)
                AcceptChanges()
            End Sub
    #End If
     
     
            Private itemConfigIdValue As Guid = Guid.Empty
            <DataMember(), Trackable()>
            Public Property ItemConfigId() As Guid
                Get
                    Return itemConfigIdValue
                End Get
                Set(ByVal value As Guid)
                    If itemConfigIdValue <> value Then
                        itemConfigIdValue = value
                        RaisePropertyChanged(BL.Props.ItemConfigId)
                    End If
                End Set
            End Property
     
     
            Private niinValue As String = String.Empty
            <DataMember(), Trackable()>
            Public Property Niin() As String
                Get
                    Return niinValue
                End Get
                Set(ByVal value As String)
                    If niinValue <> value Then
                        niinValue = value
                        RaisePropertyChanged(BL.Props.Niin)
                    End If
                End Set
            End Property
     
     
            Private heightValue As Double = 0
            <DataMember(), Trackable()>
            Public Property Height() As Double
                Get
                    Return heightValue
                End Get
                Set(ByVal value As Double)
                    If heightValue <> value Then
                        heightValue = value
                        RaisePropertyChanged(BL.Props.Height)
                    End If
                End Set
            End Property
     
     
            Private lengthValue As Double = 0
            <DataMember(), Trackable()>
            Public Property Length() As Double
                Get
                    Return lengthValue
                End Get
                Set(ByVal value As Double)
                    If lengthValue <> value Then
                        lengthValue = value
                        RaisePropertyChanged(BL.Props.Length)
                    End If
                End Set
            End Property
     
     
            Private widthValue As Double = 0
            <DataMember(), Trackable()>
            Public Property Width() As Double
                Get
                    Return widthValue
                End Get
                Set(ByVal value As Double)
                    If widthValue <> value Then
                        widthValue = value
                        RaisePropertyChanged(BL.Props.Width)
                    End If
                End Set
            End Property
     
     
            Private weightValue As Double = 0
            <DataMember(), Trackable()>
            Public Property Weight() As Double
                Get
                    Return weightValue
                End Get
                Set(ByVal value As Double)
                    If weightValue <> value Then
                        weightValue = value
                        RaisePropertyChanged(BL.Props.Weight)
                    End If
                End Set
            End Property
     
     
     
            Private configTypeValue As ItemConfigType = ItemConfigType.BareItem
            <DataMember(), Trackable()>
            Public Property ConfigType() As ItemConfigType
                Get
                    Return configTypeValue
                End Get
                Set(ByVal value As ItemConfigType)
                    If configTypeValue <> value Then
                        configTypeValue = value
                        RaisePropertyChanged(BL.Props.ConfigType)
                    End If
                End Set
            End Property
    End Class
    End Namespace
  5. Answer
    Pavel Pavlov
    Admin
    Pavel Pavlov avatar
    2039 posts

    Posted 15 Mar 2012 Link to this post

    Hello Barry ,

    Thanks  for sending the code. I see that the ConfigType property used for the DataMemberBinding  contains neither the value nor the key. It actually contains the whole keyvalue pair.
    So let us try omitting the SelectedValueMemberPath setting.
    Something like:
    Copy Code
     
      
    <telerik:GridViewComboBoxColumn  Header="Config Type"
             Width="100"
      
     
            SortMemberPath="ConfigType"
      
            ShowDistinctFilters="True"
      
            ShowFilterButton="True"
      
            ShowFieldFilters="False"
      
            ItemsSource="{Binding ConfigTypes, Source={StaticResource ItemViewModel}}"
      
            DisplayMemberPath="Key"
      
            
      
            DataMemberBinding="{Binding ConfigType}"/>



    Greetings,
    Pavel Pavlov
    the Telerik team
    Sharpen your .NET Ninja skills! Attend Q1 webinar week and get a chance to win a license! Book your seat now >>
Back to Top