Вы breaking the binding
здесь. Вы связали свои точки со свойством PointCollection и там после того, как вы установили его из своего кода, тем самым переопределяя привязку. Впоследствии, когда вы измените PointCollection в вашей ViewModel, в вашем представлении не будет замечено никаких изменений, даже если вы внедрили INotifyPropertyChanged для своего класса.
Вы можете попробовать этот маленький образец для этого -
- Поместите текстовое поле в ваше представление и привяжите его текстовое свойство к какому-либо свойству в вашей модели представления. Скажите, что значение этого свойства - «Тест»
- Теперь поместите две кнопки на ваш вид.
- При первом нажатии кнопки просто установите текст вашего текстового поля на что-то вроде «Button1».
- Вы заметите, что текстовое поле теперь будет «Button1».
- Теперь при втором нажатии кнопки попробуйте установить в свойстве Viewmodel значение «Button2». PropertyChanged будет запущен, но вы не заметите никаких изменений в текстовом поле.
Поскольку привязка была нарушена путем явной установки свойства Text вашего текстового поля.
Итак, вы всегда должны устанавливать свойство binded через его источник. В вашем случае просто установите свойство PointCollection вашей Viewmodel с INPC, чтобы увидеть изменения в представлении.
Edit:
Так как оно привязано к свойству PointCollection, поэтому изменение одного значения в коллекции не будет обновлять его в пользовательском интерфейсе. Вы должны полностью удалить привязку, установив для нее новое значение PointCollection. Вы не можете иметь оба одновременно. Посмотрите на этот кусок кода -
private void Button_Click(object sender, RoutedEventArgs e)
{
List<Point> pts = new List<Point>();
pts.Add(new Point(20, 20));
pts.Add(new Point(100, 100));
pts.Add(new Point(100, 200));
pts.Add(new Point(200, 200));
this.plLine.Points = new PointCollection(pts);
//this.plLine.SetCurrentValue(Polyline.PointsProperty, new PointCollection(pts));
}
Вам нужно установить его полностью в новую коллекцию. Если вы хотите, чтобы привязка не была нарушена установкой напрямую, как я упоминал выше, раскомментируйте мою последнюю строку и прокомментируйте вторую последнюю строку. Таким образом, ваша привязка останется без изменений.