Динамическое контекстное меню WPF с Caliburn.Micro - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать динамическое контекстное меню в моем приложении на основе Caliburn.Micro.Кто-нибудь может поделиться примером эффективного способа сделать это?Пока у меня есть очень минимальная модель для каждого элемента контекстного меню:

public class ContextMenuUiModel
{
    public string Name { get; set; }
}

свойство в моей модели представления, которое представляет список этих моделей элементов меню:

      BindableCollection<ContextMenuUiModel> m_ContextMenuItems = new BindableCollection<ContextMenuUiModel>
  {
     new ContextMenuUiModel { Name="Item 1"},
     new ContextMenuUiModel { Name="Item 2"},
     new ContextMenuUiModel { Name="Item 3"}
  };
  public BindableCollection<ContextMenuUiModel> ContextMenuItems
  {
     get {return m_ContextMenuItems;}
  }

и, пункт меню, названный для свойства коллекции (основанный на создании меню во FreePIE, найденном через этот вопрос и ответ )

         <TreeView  x:Name="ConfigItemTree" VerticalAlignment="Top" ItemsSource="{Binding ConfigTreeRoot}" >
           <TreeView.ContextMenu>
             <ContextMenu >
                <MenuItem x:Name="ContextMenuItems" DisplayMemberPath="Name" />
             </ContextMenu>
         </TreeView.ContextMenu>

Отчеты по ведению журнала Caliburn.Micro "Нет элемента для действия дляget_ContextMenuItems».Кроме того, хотя Caliburn отмечает другие именованные элементы, для которых не найдено ни одного свойства (например, «Соглашение о связывании не применено: элемент ConfigItemTree не соответствует свойству.»), Оно не делает аналогичного оператора для ContextMenuItems.Таким образом, кажется, что Caliburn просто не видит ContextMenu как элемент, с которым он может или должен иметь дело.

Может быть, проблема в том, что Caliburn не может видеть контекстное меню, потому что он на самом деле не существует до тех пор, покапроисходит щелчок (аналогично эта проблема со свернутыми элементами )?

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

1 Ответ

0 голосов
/ 20 ноября 2018

Свяжите свойство ItemsSource ContextMenu со свойством ContextMenuItems:

<ContextMenu ItemsSource="{Binding PlacementTarget.DataContext.ContextMenuItems, RelativeSource={RelativeSource Self}}" 
             DisplayMemberPath="Name" />
...