Q:

ComboBox not updating with Itemsource change

My class Looks like this:
Public Class CoursesLib
    Public CoursesOfferedMAIN As New Dictionary(Of String, Category)
    Public Class Category
        Private _CategoryName As String
        Private _Deleted As Boolean
        Public Courses As New Dictionary(Of String, Course)
        Public Function Contains(ByVal CourseName As String)
            For Each k As Course In Courses.Values
                If k.CourseName = CourseName Then
                    Return True
                    Exit Function
                End If
            Next
            Return False
        End Function
    End Class
    Public Class Course
        Private _CategoryName As String
        Private _CourseID As String
        Private _CourseName As String
        Private _Deleted As Boolean
        Public Sems As New Dictionary(Of String, Sem)
        End Sub
        Public Function Contains(ByVal find As String)
            For Each k As Sem In Sems.Values
                If k.SemName = find Then
                    Return True
                    Exit Function
                End If
            Next
            Return False
        End Function
    End Class
End Class

Following is the code i used for xaml in my wpf:
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" >
            <TextBlock Text="Categories" Margin="0,0,10,0" Width="100" VerticalAlignment="Center" />
            <ComboBox Height="30" Name="CourseCategoryComboBox1"  Width="120">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <Label Content="{Binding CategoryName}" />
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
            <Button Name="AddNewCourseCategoryButton" Background="Transparent" Content="Add New" Foreground="#FF0994EB"/>
        </StackPanel>
        <StackPanel Orientation="Horizontal" Name="NewCategorySubmitStackPanel">
            <TextBlock Text="Name" Margin="0,0,10,0" Width="100" VerticalAlignment="Center" />
            <TextBox Height="30" Name="NewCourseCategoryTextBox1"  Width="120" MaxLength="25"/>
            <Button Name="SubmitNewCourseCategoryButton" Background="Transparent" Content="+" Margin="10,0,0,0" Foreground="#FF0994EB" FontWeight="Heavy"   BorderBrush="Transparent" />
        </StackPanel>
        <StackPanel Orientation="Horizontal" Name="CourseListStackPanel" >
            <TextBlock Text="Course" Margin="0,0,10,0" Width="100" VerticalAlignment="Center" />
            <ComboBox Height="30" Name="CourseslistComboBox1" Width="120">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <Label Content="{Binding CourseName}"/>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
            <Button Name="NewCourseButton" Background="Transparent" Content="Add New" Foreground="#FF0994EB"/>
        </StackPanel>
        <StackPanel Orientation="Horizontal" Name="NewCourseeSubmitStackPanel">
            <TextBlock Text="Name" Margin="0,0,10,0" Width="100" VerticalAlignment="Center" />
            <TextBox Height="24" Name="NewCourseeTextBox1"  Width="120" MaxLength="25"/>
            <Button Name="SubmitNewCourseButton" Background="Transparent" Content="+" Margin="10,0,0,0" Foreground="#FF0994EB" FontWeight="Heavy"   BorderBrush="Transparent" />
        </StackPanel>

The problem is when the add a new course to the collection, the combox is not updating, but when i restart the app, it gets added, it is not getting inserted when I complete the insert statement.  Following is the code i use. Inserting and Updating the control:
If Not NewCourseeTextBox1.Text = "" Then
        If Globals.Courses.CoursesOfferedMAIN(CType(CourseCategoryComboBox1.SelectedItem, WorkMateLib.CoursesLib.Category).CategoryName).Contains(NewCourseeTextBox1.Text) = False Then
            Dim c As New WorkMateLib.CoursesLib.Course
            c.Category = CType(CourseCategoryComboBox1.SelectedItem, WorkMateLib.CoursesLib.Category).CategoryName
            c.CourseID = DateTime.UtcNow.ToString()
            c.CourseName = NewCourseeTextBox1.Text
            c.Deleted = False
            Dim serv As New ServiceCourses.WCFCoursesClient
            Dim ex As String
            ex = serv.AddCourse(c)
            If ex = "1" Then
                NewCourseeTextBox1.Text = ""
                NewCourseeSubmitStackPanel.Visibility = Windows.Visibility.Collapsed
                Globals.Courses.CoursesOfferedMAIN(c.Category).Courses.Add(c.CourseID, c)
                CourseslistComboBox1.ItemsSource = Globals.Courses.CoursesOfferedMAIN(c.Category).Courses.Values
            Else
                MessageBox.Show(ex)
            End If
        End If
    End If

Thank you.

A:

I tried a few methods and of them all following worked and is the easiest one as for me:
The trick is to change the ItemSource Property to nothing first and then assigning the list or any other data source, this way, the Items are getting displayed right away without any problem.
Example:
Thank you for your time and help.
SubjectlistComboBox1.ItemsSource = Nothing
                        SubjectlistComboBox1.ItemsSource = Globals.Courses.CoursesOfferedMAIN(c.Category).Courses(c.CourseID).Sems(c.SemID).Subjects.Values

