Позвольте мне объяснить мою ситуацию. Я сделал пользовательский элемент управления, который содержит ItemsControl
<ItemsControl Name="itemControlReviewTags">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<my:ReviewControl ReviewEvent="{Binding}" />
<TextBlock Text="{Binding Text}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Этот ItemsControl связан с наблюдаемой коллекцией в коде
public ObservableCollection<TagEvent> tagItems = new ObservableCollection<TagEvent>();
Коллекция устанавливается на ItemsControl следующим образом:
itemControlReviewTags.ItemsSource = tagItems;
Класс TagEvent определен, как показано ниже. Класс добавляется в коллекцию при определенных событиях.
public class TagEvent : EventArgs
{
public string Text { get; set; }
public string Comment { get; set; }
public string Value { get; set; }
public DateTime Time { get; set; }
public string Type { get; set; }
}
Элемент ReviewControl в табличке данных имел свойство DependencyProperty, например
public TagEvent ReviewEvent
{
get
{
return (TagEvent)GetValue(ReviewEventProperty);
}
set
{
SetValue(ReviewEventProperty, value);
}
}
public static readonly DependencyProperty ReviewEventProperty = DependencyProperty.Register("ReviewEvent", typeof(TagEvent), typeof(ReviewControl), new PropertyMetadata(new TagEvent() { Comment = "hallo", Text = "De tag", Time = DateTime.Now, Type = "Mark", Value = "Mark" }, ReviewEvent_PropertyChangedCallback));
private static void ReviewEvent_PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
ReviewControl reviewControl = (ReviewControl)d;
reviewControl.LoadReviewEvent();
}
Странно то, что когда я запускаю свой програнь, TagEvents добавляются в коллекцию, а ItemsControl показывает таблицу данных для каждого элемента. Тестовый блок, который я использовал для проверки значения свойств в TagEvents, показывает правильное значение свойства text. Но в свойстве Зависимость ReviewEvent я получаю только «пустые» объекты (все значения - пустая строка или дата по умолчанию). Эти объекты заменяют значение по умолчанию, поскольку я вижу это как старое значение в обратном вызове DP.
Я мог понять, что ItemsControl не показывает элементы, но почему он показывает элемент, который выглядит так, как будто он выполняет "новый TagEvent" для каждого элемента в коллекции, мне не понятно. Надеюсь, у кого-то здесь есть предложение для меня. Я попытался реализовать INotifyPropertyChanged на TagEvent, но это, похоже, ничего не изменило. Я мог бы разделить свойства класса TagEvent, но я не понимаю, почему я должен был бы делать это, когда я мог передать объект.
Помощь