2010-10-07 29 views
11

Tôi có một điều khiển, trên điều khiển đó là một lệnh gọi là SaveToClipboardCommand. Tôi muốn ràng buộc một lệnh mục trình đơn ngữ cảnh để lệnh đó để khi tôi nhấp vào nó, lệnh sao chép vào clipboard được thực hiện.Ràng buộc từ mục menu ngữ cảnh để kiểm soát cha mẹ

<Control x:Name="Control"> 
    <Control.ContextMenu> 
     <ContextMenu> 
      <MenuItem Command={"Bind to SaveToClipboardCommand here"} Header="Some Header" /> 
     </ContextMenu> 
    </Control.ContextMenu/> 
</Control> 

Việc kiểm soát (vì lập luận) được định nghĩa như thế này:

partial class Control 
{ 
     private ICommand _saveToClipboard; 
     public ICommand SaveToClipboardCommand 
     { 
      get 
      { 
       if (_saveToClipboard == null) 
       { 
        _saveToClipboard = new RelayCommand(
         x=> SaveToClipboard()); 
       } 
       return _saveToClipboard; 
      } 
    } 
} 

Tôi đã cố gắng sử dụng các ràng buộc RelativeSource và ElementName dựa nhưng cả hai đều thất bại. Là những gì tôi đang cố gắng để làm thậm chí có thể?

Cảm ơn!

+0

Bạn đã thử dùng RelativeSource nào? Bạn đã thử FindAncestor chưa? –

+0

'{Binding RelativeSource = {RelativeSource Mode = FindAncestor, AncestorType = {x: Type Control}}, Path-SaveToClipboardCommand}' – TerrorAustralis

+0

Bạn đang cố gắng liên kết với trình đơn ngữ cảnh của một điều khiển với một lệnh được xác định trong điều khiển? Nếu vậy thì bạn nên thực hiện ràng buộc trong XAML của điều khiển đó và đặt DataContext của nó thành 'this'. Nếu bạn đang ràng buộc với các thành viên lệnh bên ngoài phạm vi của 'Kiểm soát' lớp thì DataContext nên có nó để nó được giải quyết. – whoisthis

Trả lời

19

EDIT (sau khi thể hiện như thế nào kiểm soát được tiếp xúc): Vâng ContextMenu có phần phức tạp, bởi vì nó thực sự không nằm trong cây thị giác tương tự. Cố gắng làm điều này:

<MenuItem Command="{Binding Path=PlacementTarget.SaveToClipboardCommand, 
    RelativeSource={RelativeSource AncestorType=ContextMenu}}"/> 

câu trả lời gốc

là lệnh này tiếp xúc như một công tài sản của kiểm soát? Nếu lệnh là thực sự tiếp xúc trong một ViewModel treo của của kiểm soát DataContext, phải làm như sau:

Command={Binding ElementName=Control, Path=DataContext.SaveToClipboardCommand} 

Bạn có thể hiển thị như thế nào lệnh này được hiện tiếp xúc?

+0

Lệnh đang được chỉnh sửa. RelayCommand chỉ là một ICommand chuẩn thực hiện – TerrorAustralis

+0

Vâng ContextMenu hơi phức tạp, bởi vì nó thực sự không phải là một phần của cùng một Hãy thử làm điều này:

+0

tôi sẽ có một cái nhìn vào tomorow này :) cảm ơn bạn đời. Menu ngữ cảnh đẫm máu – TerrorAustralis

-1
Command={Binding ElementName=Control, Path=SaveToClipboardCommand} 

HTH

+1

Thử rằng, nhưng nó không làm việc cho tôi: (nói 'ràng buộc không thể tìm thấy nguồn ...' – TerrorAustralis

Các vấn đề liên quan