This is a migrated thread and some comments may be shown as answers.

GridView ComboBox problem

3 Answers 62 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Barry
Top achievements
Rank 1
Barry asked on 12 Mar 2012, 04:05 PM
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?

3 Answers, 1 is accepted

Sort by
0
Pavel Pavlov
Telerik team
answered on 12 Mar 2012, 04:09 PM
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 >>
0
Barry
Top achievements
Rank 1
answered on 12 Mar 2012, 04:20 PM
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
0
Accepted
Pavel Pavlov
Telerik team
answered on 15 Mar 2012, 03:33 PM
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 >>
Tags
GridView
Asked by
Barry
Top achievements
Rank 1
Answers by
Pavel Pavlov
Telerik team
Barry
Top achievements
Rank 1
Share this question
or