Tôi đang sử dụng MVVM và các đối tượng ICommand tùy chỉnh được cung cấp bởi lớp ViewModel. Một đối tượng ViewModel cùng một lúc có thể được đính kèm thông qua thuộc tính DataContext tới nhiều đối tượng View (cửa sổ, trang, v.v.). Trong ICommand.CanExecute() tôi muốn kiểm tra sự vắng mặt của các lỗi xác nhận đối với một số điều khiển trong View (được gắn với các đạo cụ ViewModel, đáng kể đối với một lệnh VM cụ thể). Một ViewModel có thể cung cấp nhiều lệnh, mỗi lệnh có bộ điều khiển riêng để xác minh xác thực lỗi. Vì vậy, giả XAML là:WPF: Làm thế nào để vượt qua toàn bộ kiểm soát như CommandParameter thông qua XAML?
<Button.CommandParameter>
<x:Array Type="sys_win:DependencyObject">
<sys_win:DependencyObject>
<reference_to_textbox_or_other_control/>
</sys_win:DependencyObject>
<sys_win:DependencyObject>
<reference_to_textbox_or_other_control/>
</sys_win:DependencyObject>
</x:Array>
</Button.CommandParameter>
Vấn đề thứ hai là các lệnh đặc biệt có thể được gọi bằng cách điều khiển, mà chính nó là một phần của DataTemplate cho mặt hàng bộ sưu tập (trong trường hợp của tôi - một phần của ListBoxItem mẫu dữ liệu) . Mục danh sách templated của tôi có hai hộp văn bản (liên kết với hai đạo cụ của ViewModel tương ứng) và nút, gọi lệnh ViewModel. Vì vậy, trong lệnh CanExecute() tôi cần phải kiểm tra lỗi xác nhận cho một số điều khiển cửa sổ & hai hộp văn bản, thuộc về danh sách này, không phải các mục khác. Đoạn code dưới đây hoạt động tốt nếu tôi muốn vượt qua tài sản ListBoxItem.IsSelected như CommandParameter:
<Button DataContext="{Binding}"
Command="{Binding Path=SwitchCommand}"
CommandParameter="{Binding Path=IsSelected, RelativeSource={
RelativeSource
Mode=FindAncestor,
AncestorType={x:Type ListBoxItem}}}"/>
Nhưng làm thế nào tôi có thể vượt qua toàn bộ (DependencyObject) ListBoxItem như CommandParameter? Và làm thế nào ListBoxItem này, thông qua {Binding RelativeSource} có thể được trộn lẫn với các điều khiển cửa sổ hiện tại trong ví dụ mã đầu tiên?
Tôi rất tiếc, nhưng làm cách nào để thêm tham chiếu vào điều khiển trong xaml?
<Button.CommandParameter>
<x:Array Type="sys_win:DependencyObject">
<sys_win:DependencyObject>
<reference_to_textbox_or_other_control/>
</sys_win:DependencyObject>
<sys_win:DependencyObject>
<reference_to_textbox_or_other_control/>
</sys_win:DependencyObject>
</x:Array>
</Button.CommandParameter>
StackOverflow không phải là diễn đàn; nếu bạn cần thêm các chi tiết khác, vui lòng [chỉnh sửa câu hỏi của bạn] (http://stackoverflow.com/posts/3482343/edit). Câu trả lời được cho là câu trả lời, không phải là thông tin bổ sung về câu hỏi. – Will