Link to home
Start Free TrialLog in
Avatar of Kevin Robinson
Kevin Robinson

asked on

Dependency Property

I am try to use a datagrid on a user control an expose the itemsource property via a dependency property.  
I am using Silverlight 4


View Model

Imports System.ServiceModel.DomainServices.Client
Imports System.Collections.ObjectModel
Imports GalaSoft.MvvmLight
Imports GalaSoft.MvvmLight.Command
Imports GalaSoft.MvvmLight.Messaging


Public Class TimeSheetsViewModel
    Inherits ViewmodelBase

    Private WithEvents ctx As TimeSheetServiceContext = OPDomainContext.OPDomainContextInstance

#Region "Properties"

    Private M_monday As New ObservableCollection(Of TIMESHEET)
    Public Property Monday As ObservableCollection(Of TIMESHEET)
        Get
            Return M_monday
        End Get
        Set(value As ObservableCollection(Of TIMESHEET))
            Me.M_monday = value
            RaisePropertyChanged("Monday")
        End Set
    End Property
    Public Property MondayLoading As Boolean = True
 
#End Region

#Region "Constructors"
    Public Sub New()
        ctx.Load(Of TIMESHEET)(ctx.GetTimeSheetsMondayQuery(), AddressOf MondayLoaded, Nothing)
    End Sub
#End Region

#Region "Private Methdods"
    Private Sub MondayLoaded(args As Loadoperation)
        Try
            Dim _TimeSheets As New ObservableCollection(Of TIMESHEET)

            For Each Timesheet As TIMESHEET In args.Entities
                _TimeSheets.Add(Timesheet)
            Next

            Me.M_monday = _TimeSheets
      
            MondayLoading = False
        Catch ex As Exception
            ErrorWindow.CreateNew(ex.Message)
        End Try
    End Sub  
#End Region
End Class

Open in new window



User Control

Partial Public Class Ctrl_TimeSheetDataGrid
    Inherits UserControl

    Public Sub New()
        InitializeComponent()
    End Sub

    Public Property TimeSheetItemsSource() As ObservableCollection(Of TIMESHEET)
        Get
            Return DirectCast(GetValue(ItemsSourceProperty), ObservableCollection(Of TIMESHEET))
        End Get
        Set(value As ObservableCollection(Of TIMESHEET))
            SetValue(ItemsSourceProperty, value)
        End Set
    End Property

    Dim ItemsSourceProperty As DependencyProperty = DependencyProperty.Register("TimeSheetItemsSource", GetType(ObservableCollection(Of TIMESHEET)), GetType(Ctrl_TimeSheetDataGrid), New PropertyMetadata(New PropertyChangedCallback(AddressOf onItemsSourcePropertyChanged)))

    Private Sub onItemsSourcePropertyChanged(sender As Object, dp As DependencyPropertyChangedEventArgs)
        Me.dgMonday.ItemsSource = dp.NewValue
    End Sub
End Class

Open in new window


Using the user control

<ds:Ctrl_TimeSheetDataGrid x:Name="dgMonday"  TimeSheetItemsSource="{Binding Monday}"/>

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of MikeToole
MikeToole
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
what is the error/exception here ?