Поведение данных Silverlight - PullRequest
0 голосов
/ 28 августа 2011

Я слежу за этим примером автоматической прокрутки в ListBox на WP7 Mango RC с таргетингом 7.1.

В моем Xaml:

 <ListBox x:Name="StatusMessages"
                 Height="100"
                 ItemsSource="{Binding StatusMessages, Mode=TwoWay}"
                 DisplayMemberPath="Message"
                 Grid.Row="3">
            <i:Interaction.Behaviors>
                <behaviors:ListBoxItemAutoScrollBehavior FoundItem="{Binding FoundItem}" />
            </i:Interaction.Behaviors>
        </ListBox>

Поведение:

 public class ListBoxItemAutoScrollBehavior : Behavior<ListBox>
    {       
        public object FoundItem
        {
            get { return GetValue(FoundItemProperty); }
            set { SetValue(FoundItemProperty, value); }
        }

        public static readonly DependencyProperty FoundItemProperty = DependencyProperty.Register("FoundItem", typeof (object), typeof (ListBoxItemAutoScrollBehavior), new PropertyMetadata(FoundItemChanged));

        private static void FoundItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            ((ListBoxItemAutoScrollBehavior) d).AssociatedObject.ScrollIntoView(e.NewValue);
        }
    }

У меня есть точка останова, установленная в методе FoundItemChanged, и я ожидаю увидеть ее попадание, когда я установлю FoundItem в моей ViewModel и сработаю NotifyProperyChanged.Только, это не работает, какие-либо идеи, почему или что я мог бы делать неправильно?

Спасибо.

обновление : точки останова удаляются для OnAttached и OnDetaching вповедение.

обновление 2: это работает в обычном приложении Silveright 4.

обновление 3: использование версии 3.8.5.0 System.Windows.Интерактивность исправила это.

Ответы [ 2 ]

2 голосов
/ 28 августа 2011

Вы нацеливаетесь на 7.1 / Mango?Привязка к объектам DependencyObjects, в отличие от FrameworkElements, является функцией Silverlight 4 и поэтому недоступна в 7.0 (которая использует SL 3).

Существует обходной путь, который Prism и MVVM Light используют для привязки к DO в SL 3.За подробностями обращайтесь к их источнику.

Редактировать: Ваша проблема в аргументах конструктора PropertyMetadata.Не указывая 2 аргумента (или, в частности, передавая метод, а не экземпляр PropertyChangedCallback), компилятор может разрешать перегрузку конструктора значение по умолчанию .

Короче говоря, измените его на:

new PropertyMetadata(null, FoundItemChanged)

Или:

new PropertyMetadata(new PropertyChangedCallback(FoundItemChanged)) 
0 голосов
/ 03 сентября 2011

Использование версии 3.8.5.0 System.Windows.Interactivity устранило эту проблему.

Этот пост дал мне совет: http://caliburnmicro.codeplex.com/discussions/271092

...