Silverlight: привязка коллекции объектов к табличке данных в itemscontrols привязывает пустые объекты к свойству - PullRequest
0 голосов
/ 01 июня 2011

Позвольте мне объяснить мою ситуацию. Я сделал пользовательский элемент управления, который содержит 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, но я не понимаю, почему я должен был бы делать это, когда я мог передать объект.

Помощь

1 Ответ

0 голосов
/ 12 июня 2011

Теперь я могу ответить на свой вопрос.У меня было утверждение, устанавливающее текстовый код usercontrol в коде, о котором я забыл.Это все испортило.

Никогда не оставляйте старый код, лежащий около ...

...