Tôi đang cố gắng ràng buộc lệnh với menuitem trong WPF. Tôi đang sử dụng cùng một phương pháp đã được làm việc cho tất cả các ràng buộc lệnh khác của tôi, nhưng tôi không thể tìm ra lý do tại sao nó không hoạt động ở đây.Lệnh ràng buộc MVVM đối với mục contextmenu
tôi đang ràng buộc lệnh của tôi như thế này:
Command = "{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.MyCommand}"
Đây là nơi mà nó đi sai (đây là bên trong một UserControl)
<Button Height="40" Margin="0,2,0,0" CommandParameter="{Binding Name}"
Command = "{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.ConnectCommand}">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Remove" CommandParameter="{Binding Name}"
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.RemoveCommand}"/>
</ContextMenu>
</Button.ContextMenu>
...
Lệnh đầu tiên ràng buộc các công trình như nó nên, nhưng người thứ hai từ chối làm bất cứ điều gì. Tôi đã thử thay đổi cấp độ tổ tiên và đặt tên cho Điều khiển của tôi để truy cập nó thông qua ElementName thay vì RelativeSource, nhưng vẫn không thay đổi. Nó tiếp tục nói "Không thể tìm thấy nguồn để ràng buộc với tham chiếu ..."
Tôi đang thiếu gì?
tôi sẽ phải kiểm tra, nhưng MenuItem có thể trong một cây khác nhau, vì vậy nó không thể tìm thấy UserControl từ kỹ thuật đó là không phải là tổ tiên (Snoop có thể xác nhận liệu tôi có nhớ điều này đúng hay không). Đối với các ràng buộc lệnh khác (chẳng hạn như lệnh cho điều khiển Nút), tại sao bạn không thể thực hiện Command = "{Binding Path = ConnectCommand}"? Nút nên kế thừa DataContext từ UserControl và do đó không yêu cầu toàn bộ cú pháp RelativeSource/FindAncestor. – MetalMikester