2014-09-25 4 views
0

나는 이에 대한 구체적인 대답이 있다고 생각한다.CanExecute에서 무엇을 가져야합니까?

나는 우리가 실행 된 방법 내에서 추가 데이터 유효성 검사를 할 경우 실행할 수있는 방법을 가지고 중복 보인다

private bool CanExecute(Object args){ 
    // Should this just be null checks? 
    // Should it also contain logic? 
    // example: 

    return this.SelectedObject != null; 

    // or 

    return this.SelectedObject != null && this.SelectedObject.Status == 1; 
} 

private void Executed(Object args){ 

    //Or should logic be reserved for the Executed command 

    if(this.SelectedObject.Status == 1) 
    //Do stuff 
    else 
    //Don't do stuff 
} 

바인딩 명령이있는 경우.

+1

다른 메소드의 데이터 유효성 검사 항목을'CanExecute()'로 옮깁니 까? – DGibbs

+0

'나는 이것이 주로 의견에 기초한 것 같다는 것을 안다.'그리고'나는 이것에 대한 특별한 대답이 있다고 생각한다.' – Shaharyar

+0

@Shaharyar 몸무게를 재기 위해 John Skeet과 같은 누군가를 찾고 있는데, 업계 표준. –

답변

2

명령의 논리가 가정하고 실행되지 않아야하는 경우 일부 조건이 충족 될 때 CanExecute은 이러한 조건을 확인해야합니다.

그렇지 않으면 CanExecute이 true를 반환해야합니다.

조건의 성격은 중요하지 않지만 장기 실행 검사가 UI 스레드 성능에 영향을 줄 수 있습니다.

+1

이것은 내 관심사이기도하다. CanExecute가 계속해서 불을 붙인 것처럼 보일 때 나는 무거운 오버 헤드를 가지고있는 어떤 조건이라도 걱정할 것입니다. –

+0

@AnthonyRussell : 그래서, 무엇이 당신을 혼란 스합니까? – Dennis

+0

난 단지 null 검사 나 다른 원시 검사가 CanExecute에 들어가야하는지 아니면 거기에 복잡한 조건 논리를 넣는 것이 가능한지에 관한 업계 표준이 있는지 알고 싶었습니다. –

2

내가 보는 방식은 어떤 일이 일어날 수 있는지 여부와 어떤 일이 발생해야하는지에 대한 구분이 있다는 것입니다.

예를 들어 저장 버튼이 될 수 있습니다. 사용자는 엔터티를 저장할 수있는 권한이 없으므로 작업을 수행 할 수 없습니다.

사용자에게 권한이있는 경우 필요한 모든 필드가 채워지지 않아서는 안됩니다.

의미 론적 의미입니다.

+0

좋은 답변입니다! CanExecute()를 사용하면 컨트롤의 상태가 결과 부울에 의해 설정 될 수 있다는 점도 지적하고 싶습니다. 좋은 점이 있습니다. –