2012-11-30 3 views
0

하나의 명령에 연결된 단추 이름으로 매개 변수화 된 유사한 작업을 수행하는 많은 (40 개가 넘는) 단추가있는 WPF 인터페이스가 있습니다. 내 명령 처리기에는 40 개의 단추 중 어떤 단추를 클릭했는지 확인하는 도구가있었습니다. 문제는 런타임 조건에 따라 이러한 명령 중 일부를 선택적으로 사용하지 않도록 설정하거나 사용 가능하게 설정하는 방법이었습니다. 하나의 CanExecute 메소드를 여러 구성 요소에 적용하고 e.Source 신원에 따라 차별화하는 것이 효과가 없다는 우려가 있습니다.하나의 CanExecute로 컨트롤 배열에서 요소를 선택적으로 비활성화하는 방법

+0

쇼 좀 더 코드하시기 바랍니다 –

+1

정확하게 작동하지 않습니다,'e.Source'는 오른쪽 버튼을 포함하지 않습니까, 아니면'CanExecute' 메소드가 호출되지 않았습니까? – bitbonk

+0

@bitbonk 문제를 재현하는 데 어려움이 있으므로이 질문을 닫으려고합니다. 나는 문제가 없다고 생각한다. – Mishax

답변

0

시험이 다음과 같은 방식으로 구성된 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; 
} 
1

실행 논리가 다른 경우 모든 단추를 동일한 명령에 바인딩 할 이유가 없습니다.

정말 명령은 큰 것보다, 분리보고 싶은 경우

+0

필자의 우려는 CanExecute 서명이있는 40 개의 개별 메서드보다 40 if 문을 작성하는 것이 더 쉽고 빠르며 유지 관리가 더 쉽다는 것입니다. – Mishax

+0

버튼이 다른 것들을하고 있습니까? 모든 버튼에 대해 블록으로 작성 하시겠습니까? –

+0

예, 버튼은 정적이며 사실상 동일한 작업을 수행하며 다른 바이트가 포함 된 서버로 메시지를 보냅니다. 어쩌면 일상적인 사용자 시나리오가 아닐 수도 있습니다. 나는이 버튼들이 완전히 다른 일을하고 있고 (또한 많은 논리를 가지고 있고) 별도의 명령을 갖는 것이 바람직 할 것이라는 데 동의한다. – Mishax

관련 문제