Посмотрите на этот вопрос: Почему не работает эта привязка данных?
И на этом тоже: 2-й раз привязка к PointCollection не отображается
Поскольку вы дали мало подробностей, я не совсем уверен, что происходит, но эти посты могут помочь. Если нет, пожалуйста, оставьте свой код.
Я провел некоторое тестирование, и лучшее решение, которое я могу придумать, это:
using System.ComponentModel;
using System.Windows;
using System.Windows.Media;
namespace SilverlightApplication6
{
public class DemoVM : INotifyPropertyChanged
{
#region PointsClone Property
private PointCollection _pointsClone;
public PointCollection PointsClone
{
get
{
return _pointsClone;
}
set
{
if (_pointsClone != value)
{
_pointsClone = value;
OnPropertyChanged("PointsClone");
}
}
}
#endregion
#region Points Property
private PointCollection _points;
public PointCollection Points
{
get
{
return _points;
}
set
{
if (_points != value)
{
_points = value;
PointsClone.Clear();
foreach (var point in _points)
{
PointsClone.Add(point);
}
OnPropertyChanged("Points");
}
}
}
#endregion
public DemoVM()
{
PointsClone = new PointCollection();
Points = new PointCollection();
}
public void AddPoint(Point point)
{
Points.Add(point);
PointsClone.Add(point);
}
public void ClearPoints()
{
Points.Clear();
PointsClone.Clear();
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
var p = PropertyChanged;
if (p != null)
{
p(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
Свяжите одну PolyLine.Points с точками, а другую PolyLine.Points с точками Clone.
Это немного уродливо, потому что оно сломается, когда вы используете vm.Points.Add (точка) вместо vm.AddPoint (точка). Применив правильную инкапсуляцию, вы сможете решить эту проблему.