Wpf itemscontrol binding not updating dating with an age gap
While there is a lot of literature for very similar issues that can be found, I haven't been able to find an exact solution to my particular problem.
I am having trouble getting my Items Control using a canvas as the Items Panel to update the UI after a property of an item within its Items Source has been modified.
even with INotify Property Change being called Line Data(0). When the application first starts, there are two horizontal, parallel lines displayed.
I have added Notify On Target Updated=True and Target Updated="Refresh Canvas" to my Items Control declaration in xaml.
First, Main Window.xaml: As you can see, the Data Context of my Window is Main Window View Model, and the binding of the Item Source is Line Data (located within that VM). The first two buttons execute ICommands, while the third button executes a behind-code refresh of the Items Control (This is for debugging purposes, to prove that a bound property within the Item Source is being updated while the UI is not). The first button is bound to Command1 in the VM, while the second button is bound to Command2 in the VM. Relay Command(Address Of Execute Command1) End If Return _Command1 End Get End Property Private _Command2 As ICommand Public Read Only Property Command2 As ICommand Get If _Command2 Is Nothing Then _Command2 = New MVVM. Y2 = "50" On Property Changed("Line Data") End Sub ' Misc methods Private Function Get Line Data() As Observable Collection(Of Line Structure) Dim tmp List As New Observable Collection(Of Line Structure) ' Create two horizontal parallel lines tmp List. Add(New Line Structure With ) Return tmp List End Function End Class Public Class Line Structure Public Property X1 Public Property Y1 Public Property X2 Public Property Y2 End Class In my viewmodel, I have defined Line Data immediately (this is what my Items Source is bound to), so we have some data for our Item Source ready to be displayed in the canvas upon execution.
Relay Command(Address Of Execute Command2) End If Return _Command2 End Get End Property ' ICommand Methods Private Sub Execute Command1() ' Re-arrange Line Data(0) to make a plus sign on the canvas ' This works - Assigning a new value to an item of the collection updates the canvas Line Data(0) = New Line Structure With End Sub Private Sub Execute Command2() ' Put Line Data(0) back into its original position ' This doesn't work - Modifying the PROPERTY of an item in the collection does not update the canvas.. It is defined by a Get Line Data() function, which simply returns a populated Observable Collection of 2 lines.
Fail() is used when an invalid property name is passed to the Verify Property Name method.
' The default value is false, but subclasses used by unit tests might override this property's getter to return true. Can Execute Changed Add Handler(By Val value As Event Handler) If _obj Can Execute Method Is Not Nothing Then Add Handler Command Manager.