Я борюсь с зависимостью в управлении. Мой DependencyProperty это объект, который выглядит следующим образом:Объект DependencyProperty, не обновляющийся до UI
public class ChartGroupCollection : ObservableCollection<ChartGroup>, INotifyCollectionChanged
{
public void ClearDirty()
{
foreach (var grp in base.Items)
{
foreach(var run in grp.ChartRuns.Where(x=>x.IsDirty))
{
run.IsDirty = false;
}
grp.IsDirty = false;
}
}
[XmlIgnore]
public bool IsDirty //dirty flag for save prompt
{
get
{
....
}
}
}
[Serializable]
public class ChartGroup : INotifyPropertyChanged
{ ... //various properties }
DependencyProperty устанавливается как здесь (названный Tree, который является экземпляром ChartGroupCollection):
public static readonly DependencyProperty TreeProperty = DependencyProperty.Register("Tree", typeof(ChartGroupCollection), typeof(ChartsControl), new PropertyMetadata(OnTreeChanged));
public ChartGroupCollection Tree
{
get { return (ChartGroupCollection)GetValue(TreeProperty); }
set { SetValue(TreeProperty, value); }
}
private static void OnTreeChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
var Treee = sender as ChartsControl;
if (e.OldValue != null)
{
var coll = (INotifyCollectionChanged)e.OldValue;
coll.CollectionChanged -= Tree_CollectionChanged;
}
if (e.NewValue != null)
{
var coll = (ObservableCollection<ChartGroup>)e.NewValue;
coll.CollectionChanged += Tree_CollectionChanged;
}
}
private static void Tree_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
(sender as ChartsControl).OnTreeChanged();
}
void OnTreeChanged()
{
MessageBox.Show("Do something..."); //RefreshCharts();
}
Я, кажется, подобрались к Событие OnTreeChanged только при создании объекта, но как только я выполняю другую работу (добавление в списки внутри ChartGroup или изменение свойств объектов ChartGroup или даже удаление элементов наблюдаемого коллекций, похоже, никогда не вызывает событие обновления. Я пробовал несколько других методов получение зависимого свойства, найденного в сети, но никакое решение не работало для меня. Интересно, вниз к внутренней природе моего объекта DependencyProperty или ошибке с моей стороны
Спасибо, вы правы насчет статичности. Я все еще придерживаюсь control.TileLayerCollectionChanged, что он делает и какой код мне нужно добавить, чтобы заставить его работать? создать метод заглушки? – GSammons
Это был только экземпляр и вставка ошибки из моего кода. Тем временем я отредактировал ответ. – Clemens
Спасибо за реальную скорость в ответе. Отлично – GSammons