Как заставить контекстное меню быть загруженным?

У меня есть приложение wpf, в котором есть TreeView. TreeView имеет контекстное меню. Контекстное меню начинает загружаться только после того, как я щелкну правой кнопкой мыши по одному из TreeViewItems. (Как я это знаю - я добавил журнал в загруженное событие контекстного меню. Как только я щелкнул по одному из TreeViewItems, он написал сообщение журнала. Проблема, которую это вызывает, заключается в том, что кажется, что контекстное меню не работает в первый раз, когда его при нажатии. Когда на самом деле загрузка занимает время в первый раз.) Поскольку загрузка занимает минуту или две, я хочу, чтобы она сразу начала загружаться после запуска приложения. В контекстном меню нет действия "Загрузить". Есть идеи, как это сделать?

2 ответа

Решение

Элементы контекстного меню были связаны с внутренним свойством в контексте данных (например, если у меня было свойство с именем Manager, а у него было свойство с именем MenuItems, оно было связано с Manager.MenuItems). Внутреннее свойство имело только свойство get, которое при его вызове вычисляло бы наблюдаемую коллекцию пунктов меню. Итак, что я сделал, чтобы решить мою проблему, я подписал событие TreeView Loaded и там я перебрал все первые иерархии TreeViewItems, для каждой из которых я сделал:

    item.IsSelected = true;
    item.Focus();
    item.IsOpen = true;
    var items = Manager.MenuItems; // Calculates the menu items (it's per item in my code so it doesn't look exactly the same

Четвертая строка должна была вычислить пункты меню перед загрузкой. Две последние строки должны объединиться, по какой-то причине это не сработает, если его там нет. Надеюсь, это поможет кому-то

Создать стиль для вашего context menu как ниже,

 <ContextMenu ItemsSource="{Binding ContextActions}">                    
     <ContextMenu.ItemContainerStyle>
          <Style TargetType="{x:Type MenuItem}" >
                <Setter Property="Header" Value="{Binding Title}"/>
                <Setter Property="ToolTip" Value="{Binding ToolTips}"/>
                <Setter Property="Command" Value="{Binding ContextCommand}"/>
                <Setter Property="Icon" Value="{StaticResource Icon}"/>
                <Setter Property="CommandParameter" Value="{Binding CommandParameter}"/>
           </Style>
     </ContextMenu.ItemContainerStyle>
 </ContextMenu>

+ Изменить context menuItemsSource на основе выбранного вами элемента вашего tree view,

Другие вопросы по тегам