Соглашение о привязке caliburn.micro для ListPicker на WP7 - PullRequest
4 голосов
/ 18 июля 2011

Я пробую инфраструктуру caliburn.micro для нового проекта, но я застрял с привязкой ListPicker (из набора инструментов). Когда я изменяю элемент управления на простой DropDown, все работает как положено. Я предполагаю, что DropDown работает правильно, потому что соглашение по умолчанию реализовано здесь :

AddElementConvention<Selector>(Selector.ItemsSourceProperty, "SelectedItem", "SelectionChanged")
    .ApplyBinding = (viewModelType, path, property, element, convention) => {
        if (!SetBinding(viewModelType, path, property, element, convention))
            return false;

        ConfigureSelectedItem(element, Selector.SelectedItemProperty,viewModelType, path);
        ApplyItemTemplate((ItemsControl)element, property);

        return true;
    };

ListPicker не реализует Selector, поэтому я попытался добавить пользовательское соглашение в мой загрузчик:

static void AddCustomConventions() {
    AddElementConvention<ListPicker>(ListPicker.ItemsSourceProperty, "SelectedItem", "SelectionChanged")
        .ApplyBinding = (viewModelType, path, property, element, convention) => {
            ConventionManager.ConfigureSelectedItem(element, ListPicker.SelectedItemProperty,viewModelType, path);
            return true;
        };
}

К сожалению, это не работает. Вы можете помочь?

1 Ответ

8 голосов
/ 18 июля 2011

Я решил мою проблему с этим соглашением.

ConventionManager.AddElementConvention<ListPicker>(ListPicker.ItemsSourceProperty, "SelectedItem", "SelectionChanged")
    .ApplyBinding = (viewModelType, path, property, element, convention) =>
    {
        if (ConventionManager.GetElementConvention(typeof(ItemsControl)).ApplyBinding(viewModelType, path, property, element, convention))
        {
            ConventionManager.ConfigureSelectedItem(element, ListPicker.SelectedItemProperty, viewModelType, path);
            return true;
        }
        return false;
    };

Дополнительно, была другая проблема.Мое свойство SelectedItem возвратило ноль, но мое свойство Items не содержало нулевое значение.Я получил исключение, что выбранный элемент недействителен, потому что его нет в списке.

...