问题描述
||
让我解释一下我的情况。我已经制作了一个包含ItemsControl的用户控件
<ItemsControl Name=\"itemControlReviewTags\">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<my:ReviewControl ReviewEvent=\"{Binding}\" />
<TextBlock Text=\"{Binding Text}\" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
此ItemsControl绑定到后面的代码中的observablecollection
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 Dependency属性中,我仅获得\“ empty \”对象(所有值均为空字符串或默认日期)。这些对象替换了默认值,因为我可以看到它是DP回调中的oldvalue。
我可以理解ItemsControl没有显示项目,但是为什么它显示的是集合中每个项目都在执行“新TagEvent”的项目,这超出了我的范围。希望有人对我有建议。我尝试在TagEvent上实现INotifyPropertyChanged,但似乎没有任何改变。我可以拆分TagEvent类的属性,但是我不明白为什么当我可以传递对象时为什么必须这样做。
救命?
解决方法
我现在可以回答我自己的问题。我忘记了在代码背后设置一条语句设置用户控件的数据上下文。它搞砸了。
永远不要留下旧的代码...