私は独自のコンテキストメニューを持つユーザーコントロールを持っていますが、そのメニューにアイテムを追加する必要があります。データコレクションの依存プロパティをユーザーコントロールのメニューにバインドする
私が取ったアプローチは、依存関係プロパティと呼ばれるContextMenuItemsを持っていることでした。
<CompositeCollection x:Key="MenuItemsCompositeCollection">
<MenuItem Header="TEST" />
<CollectionContainer Collection="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=ContextMenuItems, Converter={StaticResource TestConverter}}" />
<MenuItem Header="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=ContextMenuItems}" />
</CompositeCollection>
:私は、ホストによって提供されたリストでコントロールから静的メニュー項目を組み合わせるためにCompositeCollectionを使用
Public Shared ReadOnly ContextMenuItemsProperty As DependencyProperty = DependencyProperty.Register("ContextMenuItems", GetType(ObservableCollection(Of MenuItem)), GetType(SmartDataControl), New FrameworkPropertyMetadata(New ObservableCollection(Of MenuItem)))
Public Property ContextMenuItems As ObservableCollection(Of MenuItem)
Get
Return GetValue(ContextMenuItemsProperty)
End Get
Set(ByVal value As ObservableCollection(Of MenuItem))
SetValue(ContextMenuItemsProperty, value)
End Set
End Property
私はそのリソースに結合したときに、私が見るものは次のとおりです。
- TEST
- (コレクション)
2番目のメニュー項目は、私はそれを得ることができることを証明するために、コレクションにバインドされています。私はメニュー項目に追加したテストコンバーターを持っていますが、コンバーターメソッドでブレークしますが、コンバーターをCollectionContainerに追加すると呼び出されません。
は最後に、私は、出力ウィンドウに次のエラーが表示されます。
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.UserControl', AncestorLevel='1''. BindingExpression:Path=ContextMenuItems; DataItem=null; target element is 'CollectionContainer' (HashCode=41005040); target property is 'Collection' (type 'IEnumerable')
これはかなり意味があります。私はバインディング式にタイプミスがなかったことを証明していたことを知っていましたが、あなたのエクスプロレーションはなぜ1つの場所で動作するのか、別の場所では動作しないのかを明らかにしました。 Binding.Sourceとx:Referenceをどのように使用するかを示すXAMLを投稿できますか(MSのドキュメントはあまり役に立ちません)。ありがとう。 – Darren
@Darren:例を追加して、最初の段落の一部を書き直しました。問題は実際にオブジェクトからの継承ではなく(MenuItemのバインディングがまだ機能しているので)、むしろCollectionContainerがVisualTree。一般に、バインディングの多くの処理はかなり難読化されています。いくつかのケースでは、あなたは非常に魔法かもしれない[人工的な継承コンテキスト](http://blogs.msdn.com/b/nickkramer/archive/2006/08/18/705116.aspx)を持っています... –
パーフェクト - ありがとうすべての詳細について – Darren