2017-10-10 15 views
0

現在、動的に作成されたコンテキストメニューを作成しようとしています。コンテキストメニューのItemsSourceプロパティには現在ObservableCollection<MenuItem>がバインドされています。私は今、私が選択したものに応じてメニューが開いたときに、リスト内の項目の可視性を設定したいと思っています。
私はこのメニューのプロパティを開くメニュー項目

public class CtContextMenuItem : MenuItem 
{ 
    public delegate Visibility VisibilityDelegate(); 
    public VisibilityDelegate IsVisibleDelegate = null; 
} 

ようMenuItemから継承しようと、私は、コンテキストメニューが開かれたときVisibilityDelegateの結果にVisibilityを設定したいが、私はMenuItemに呼び出されたすべてのイベントや方法を見つけることができませんコンテキストメニューが開かれたとき
これを行う方法はありますか、それともContextMenuOpeningを聞いている関数の中にメニューのすべての項目を作成するだけですか?

+0

* "のContextMenuOpeningに耳を傾け、" * - はい。メニューアイテムを列挙し、そのデリゲートを直接またはプロパティ(データテンプレートバインディングが使用されている場合)を介して呼び出します。カスタムコントロールを使用する代わりに[mvvm](https://stackoverflow.com/q/15566824/1997232)を少し追加することを検討してください。 – Sinatr

答えて

0

バインドCtContextMenuItemタイプは、あなたのXAMLにと結合することができるVisibilityboolプロパティを持ってObservableCollection<CtContextMenuItem>からItemsSource。このような何か:

public class CtContextMenuItem 
{ 
    public Visibility IsVisible { get; set; } 
} 

<ContextMenu ItemsSource="{Binding TheSourceCollection}"> 
    <ContextMenu.ItemContainerStyle> 
     <Style TargetType="MenuItem"> 
      <Setter Property="Visibility" Value="{Binding IsVisible}" /> 
     </Style> 
    </ContextMenu.ItemContainerStyle> 
</ContextMenu> 
関連する問題