하나의 명령에 연결된 단추 이름으로 매개 변수화 된 유사한 작업을 수행하는 많은 (40 개가 넘는) 단추가있는 WPF 인터페이스가 있습니다. 내 명령 처리기에는 40 개의 단추 중 어떤 단추를 클릭했는지 확인하는 도구가있었습니다. 문제는 런타임 조건에 따라 이러한 명령 중 일부를 선택적으로 사용하지 않도록 설정하거나 사용 가능하게 설정하는 방법이었습니다. 하나의 CanExecute 메소드를 여러 구성 요소에 적용하고 e.Source 신원에 따라 차별화하는 것이 효과가 없다는 우려가 있습니다.하나의 CanExecute로 컨트롤 배열에서 요소를 선택적으로 비활성화하는 방법
답변
시험이 다음과 같은 방식으로 구성된 CanExecute 방법을 사용하여 달성 할 수있는 것을 보여 모든 버튼 이름을 가진 다른 블록 :
private void MyCommandCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
if (e.Source == button1)
e.CanExecute = checkBox1.IsChecked.HasValue ? checkBox1.IsChecked.Value : false;
if (e.Source == button2)
e.CanExecute = checkBox2.IsChecked.HasValue ? checkBox2.IsChecked.Value : false;
if (e.Source == button3)
e.CanExecute = checkBox3.IsChecked.HasValue ? checkBox3.IsChecked.Value : false;
}
실행 논리가 다른 경우 모든 단추를 동일한 명령에 바인딩 할 이유가 없습니다.
정말 명령은 큰 것보다, 분리보고 싶은 경우
필자의 우려는 CanExecute 서명이있는 40 개의 개별 메서드보다 40 if 문을 작성하는 것이 더 쉽고 빠르며 유지 관리가 더 쉽다는 것입니다. – Mishax
버튼이 다른 것들을하고 있습니까? 모든 버튼에 대해 블록으로 작성 하시겠습니까? –
예, 버튼은 정적이며 사실상 동일한 작업을 수행하며 다른 바이트가 포함 된 서버로 메시지를 보냅니다. 어쩌면 일상적인 사용자 시나리오가 아닐 수도 있습니다. 나는이 버튼들이 완전히 다른 일을하고 있고 (또한 많은 논리를 가지고 있고) 별도의 명령을 갖는 것이 바람직 할 것이라는 데 동의한다. – Mishax
- 1. NSPopUpButton- 일부 메뉴 항목을 선택적으로 비활성화하는 방법?
- 2. 배열에서 요소를 거부하는 방법?
- 3. 배열에서 하나의 비 반복 요소를 찾으시겠습니까?
- 4. 배열에서 특정 요소를 제거하는 방법
- 5. 배열에서 특정 요소를 제거하는 방법
- 6. 스윙 구성 요소를 선택적으로 오버레이합니까?
- 7. 디자이너에서 사용자 지정 컨트롤 편집을 비활성화하는 방법
- 8. Zend_Form 전체에서 하나의 폼 요소를 채우는 방법()?
- 9. 루비의 배열에서 요소를 제거하십시오.
- 10. 배열에서 요소를 제거합니다 matlab
- 11. 배열에서 요소를 분할하여 새 배열로 반환하는 방법
- 12. 자바 스크립트 배열에서 요소를 찾는 효과적인 방법
- 13. PHP에서 개체의 배열에서 요소를 삭제하는 방법?
- 14. 배열에서 두 요소를 동시에 제거하는 방법
- 15. 하나의 개체에 대해서만 GL_DEPTH_TEST를 비활성화하는 방법
- 16. 정렬되지 않은 배열에서 하나의 요소와 N 개의 요소를 찾음
- 17. 하나의 구성 요소를 확장하는 방법?
- 18. WebControl 요소를 선택적으로 사용하지 않도록 설정
- 19. gridlayout에서 요소를 비활성화하는 방법은 무엇입니까?
- 20. 배열에서 각 요소를 분해하고 선택하십시오.
- 21. 배열에서 특정 요소를 제거 하시겠습니까?
- 22. MongoDB를/PHP : 배열에서 요소를 삭제
- 23. 배열에서 특정 요소를 추출하려면 어떻게합니까?
- 24. ScatterView에서 관성을 비활성화하는 방법
- 25. 배열에서 특정 요소를 삭제하는 방법은 무엇입니까?
- 26. 이미지를 비활성화하는 방법
- 27. 하나의 배열에서 Char 및 Int
- 28. 배열에서 데이터를 읽는 방법?
- 29. Tumblr Photosets를 비활성화하는 방법
- 30. 모달 대화 상자를 열 때 컨트롤 클릭 이벤트를 비활성화하는 방법
쇼 좀 더 코드하시기 바랍니다 –
정확하게 작동하지 않습니다,'e.Source'는 오른쪽 버튼을 포함하지 않습니까, 아니면'CanExecute' 메소드가 호출되지 않았습니까? – bitbonk
@bitbonk 문제를 재현하는 데 어려움이 있으므로이 질문을 닫으려고합니다. 나는 문제가 없다고 생각한다. – Mishax