2016-04-01 6 views
0

Я пытаюсь заполнить элемент меню коллекцией детских предметов. Это было легко, однако мне нужно добавить дополнительный, который всегда присутствует, который выполняет операцию «добавить». Я использовал составную коллекцию, чтобы добавить это в существующий набор элементов, которые необходимо отобразить.Population MenuItem с композитной коллекцией «удвоение» вверх

Вот код:

<MenuItem Header="Time Ranges" x:Name="TimeRangesMenuItem" 
     Background="{StaticResource TitleBarButtonBackgroundBrush}" 
     Margin="2"> 
    <MenuItem.Resources> 
     <CollectionViewSource Source="{Binding ElementName=TimeRangesMenuItem, Path=DataContext.TimeSpans}" x:Key="TimeSpanMenuItems" /> 
    </MenuItem.Resources> 
    <MenuItem.ItemsSource> 
     <CompositeCollection> 
      <CollectionContainer Collection="{Binding Source={StaticResource TimeSpanMenuItems}}" /> 
      <Separator /> 
      <MenuItem Header="Add New" cal:Message.Attach="NewTimeSpan()" /> 
     </CompositeCollection> 
    </MenuItem.ItemsSource> 
    <MenuItem.ItemTemplate> 
     <ItemContainerTemplate> 
      <MenuItem Header="{Binding Name}" cal:Message.Attach="ConfigureTimeSpan()" /> 
     </ItemContainerTemplate> 
    </MenuItem.ItemTemplate> 
</MenuItem> 

Он работает, почти. DataContext.TimeSpans ViewModel, который я пытаюсь отобразить, «вложен» внутри двух MenuItems, а не просто заполняет его, поэтому я получаю это странное поведение (у этого есть только один TimeSpanViewModel «Time Span»:

Мышь за пределами . "внутренний" MenuItem Обратите внимание, внутренний один функционален, если нажать его:

enter image description here

Нормальный MenuItem:

enter image description here

Каждый получил какой-либо идеи о том, как это исправить?

ответ

1

Что такое элемент ItemContainerTemplate ...

Я думаю, что вы хотите, чтобы манипулировать MenuItem.ItemContainerStyle вместо этого, в противном случае вы создаете два MenuItems как наблюдалось.


MenuItem.ItemTemplate уже определяет, что находится внутри данного контейнера элемента (в зависимости от управления, то здесь MenuItem, в ComboBox это ComboBoxItem и т.д.). Поскольку не существует объекта на MenuItem, вы можете использовать его таким образом, чтобы реализовать селектор, который возвращает ваш шаблон и устанавливает его как ItemContainerTemplateSelector.

+0

Ах! Конечно. Спасибо, отлично работает. – Joe

+0

@ Joe: Я почти уверен, что сам совершил эту ошибку в какой-то момент :) –