Как привязать свойство источника к методу TARGET - PullRequest
0 голосов
/ 08 февраля 2011

Существует множество способов привязать метод SOURCE к целевому свойству с помощью ValueConverter или ObjectDataProvider. Однако что, если я хочу, чтобы привязка влияла на целевой МЕТОД?

Рассмотрим следующий пример:

class ListBoxViewModel
{
        public static readonly DependencyProperty CurrentItemProperty = DependencyProperty.Register("CurrentItem", typeof (object), typeof (ListBoxViewModel));

        public object CurrentItem
        {
            get { return (object) GetValue(CurrentItemProperty); }
            set { SetValue(CurrentItemProperty, value); }
        }   
}

Я бы хотел связать свойство CurrentItem с ListBox CollectionView . Однако, поскольку свойство CurrentItem в CollectionView доступно только для чтения, я не могу связываться с ним напрямую. Вместо этого я должен выполнить функцию MoveCurrentToPosition . Как я могу это сделать?

Если есть другой способ сделать это - без привязки к методу, я бы тоже хотел его услышать, однако главный вопрос - как связать метод, если не в этом случае, то в похожий Если это невозможно, какова лучшая альтернатива? Например, одна мысль, которая приходит в голову, - это подписаться на уведомление об изменении свойства зависимости (в данном случае CurrentItem) и запустить процедурный код из этой функции.

Спасибо!

1 Ответ

1 голос
/ 14 июня 2011

Вы можете зарегистрировать свою собственность с помощью обратного вызова с измененным свойством, после чего вы можете вручную обновить CollectionView:

public static readonly DependencyProperty CurrentItemProperty =
    DependencyProperty.Register
    (
        "CurrentItem",
        typeof(object),
        typeof(ListBoxViewModel),
        new UIPropertyMetadata(null, CurrentItemChanged)
    );
public object CurrentItem
{
    get { return (object)GetValue(CurrentItemProperty); }
    set { SetValue(CurrentItemProperty, value); }
}

private static void CurrentItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    // Update current item logic
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...