Silverlight:将对象集合绑定到ItemsControl中的datatemplate会将空对象绑定到属性

问题描述

|| 让我解释一下我的情况。我已经制作了一个包含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类的属性,但是我不明白为什么当我可以传递对象时为什么必须这样做。 救命?     

解决方法

        我现在可以回答我自己的问题。我忘记了在代码背后设置一条语句设置用户控件的数据上下文。它搞砸了。 永远不要留下旧的代码...