Список DependencyProperty всегда возвращает ноль - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть пользовательский элемент управления "ToolbarMenuButton" со следующим DependencyProperty:

public ObservableCollection<object> TbMenuItems
{
    get { return (ObservableCollection<object>)GetValue(TbMenuItemsProperty); }
    set { SetValue(TbMenuItemsProperty, value); }
}

public static readonly DependencyProperty TbMenuItemsProperty =
    DependencyProperty.Register("TbMenuItems", typeof(ObservableCollection<object>), typeof(ToolbarMenuButton), new PropertyMetadata(null));

Я установил его так:

<customs:ToolbarMenuButton TbText="By Flight" TbIcon="PlaneRotated45"
                           TbMenuItems="{Binding Flights}"
                           TbItemCommand="{Binding FlightSelect}">

И он появляется, нет проблем.Теперь в пользовательском элементе управления есть обработчик щелчка для этой кнопки, который гарантирует, что контекстное меню установлено, а если нет, оно создает новое на основе свойства зависимости TbMenuItems, показанного выше.

Ошибка: Это свойство всегда равно null (я получаю пустое исключение во время выполнения, когда нажимаю кнопку).Я получил около 40 ответов от stackoverflow относительно этого, они либо не применимы, либо не исправили.Как я понимаю, свойства get / set для свойств зависимостей не вызываются, но я не уверен, как тогда я должен был получить данные из него.

Что я пробовал: Я пытался уведомить об изменении свойства, когда установлены рейсы.Я удостоверился, что Полеты установлены, поместив один из них в текстовое поле рядом с кнопкой (поэтому я также знаю, что текстовые данные, путь и т. Д. Все верны).Я изменил это на наблюдаемую коллекцию (изначально был списком), чтобы посмотреть, помогло ли это.Все остальные свойства зависимостей работают нормально (конечно, они также связаны с шаблоном данных в стиле, не уверен, что это имеет значение).Я не уверен, куда идти, сейчас.

1 Ответ

0 голосов
/ 15 декабря 2018

Проблема заключается в том, что вы используете слишком специфический тип для свойства типа коллекции, который не совместим с назначением со значением, создаваемым привязкой данных.

Вместо этого следует использовать наиболее универсальную коллекциютип, который возможно использовать, обычно IEnumerable:

public IEnumerable TbMenuItems
{
    get { return (IEnumerable)GetValue(TbMenuItemsProperty); }
    set { SetValue(TbMenuItemsProperty, value); }
}

public static readonly DependencyProperty TbMenuItemsProperty = DependencyProperty.Register(
    nameof(TbMenuItems), typeof(IEnumerable), typeof(ToolbarMenuButton));
...