2013-10-25 31 views
3

我有使用的ItemsSource綁定到一個集合的上下文菜單:如何將靜態項目添加到綁定到現有數據源的上下文菜單中?

<Button Content="Submit"> 
<Button.ContextMenu> 
    <ContextMenu Name="SubmitButtonContextMenu" ItemsSource="{Binding MyDataSource}"> 
     <ContextMenu.ItemContainerStyle> 
      <Style TargetType="{x:Type MenuItem}"> 
       <!-- Setters --> 
      </Style> 
     </ContextMenu.ItemContainerStyle> 
    </ContextMenu> 
</Button.ContextMenu> 
</Button> 

而且它目前會出現這樣的:Menu Item

基本上,我想補充兩個靜態項目:另一個菜單項即會永遠不會改變,還有一個間隔分隔我的靜態內容和我的動態內容。我可以將我的收藏充滿它與這些數據綁定,但我覺得應該有一個更優雅的解決方案。我也寧願避免使用子上下文菜單。

編輯:這就是我最終實現:

<Window ...> 
<Window.Resources> 
    <s:SubmitItemStyleSelector x:Key="SubmitItemStyleSelector"> 
     <s:SubmitItemStyleSelector.SubmitButtonStyle> 
      <Style TargetType="MenuItem"> 
       <!--Setters--> 
      </Style> 
     </s:SubmitItemStyleSelector.SubmitButtonStyle> 
    </s:SubmitItemStyleSelector> 
    <CollectionViewSource x:Key="MyDataViewSource" Source="{Binding MyDataSource}"/> 
</Window.Resources> 
... 
<Button Content="Submit"> 
    <Button.ContextMenu> 
     <ContextMenu ItemContainerStyleSelector="{Binding Source={StaticResource SubmitItemStyleSelector}}"> 
      <ContextMenu.ItemsSource> 
       <CompositeCollection> 
        <MenuItem Header="No Change"/> 
        <Separator/> 
        <CollectionContainer Collection="{Binding Source={StaticResource MyDataViewSource}}"/> 
       </CompositeCollection> 
      </ContextMenu.ItemsSource> 
     </ContextMenu> 
    </Button.ContextMenu> 
</Button> 

然後我SubmitItemStyleSelector發現我從MyDataSource想做的只是這些項目的額外造型的類型。

+0

你將在運行時這些元素? – Smeegs

回答

6

您應該使用CompositeCollectionmsdn):

<Window .. 
     > 
    <Window.Resources> 
     <CollectionViewSource x:Key="MyDynamicDataSource" Source="{Binding Path=MyDataSource}" /> 
    ... 
    </Window.Resources> 
    ... 
    <Button Content="Submit" > 
     <Button.ContextMenu> 
      <ContextMenu Name="SubmitButtonContextMenu"> 
       <ContextMenu.ItemsSource> 
        <CompositeCollection> 
         <MenuItem Header="First static item" /> 
         <MenuItem Header="Second static item" /> 
         <Separator /> 
         <CollectionContainer Collection="{Binding Source={StaticResource MyDynamicDataSource}}" /> 
        </CompositeCollection> 
       </ContextMenu.ItemsSource> 
      </ContextMenu> 
     </Button.ContextMenu> 
    </Button> 
    ... 
</Window> 
+0

這樣做。謝謝! – MGSoto

相關問題