문제

이 질문에 대해 이전에 또는 간접적으로 근처 프리즘 및 MVVM 블로그에서 논의 된 경우에도 엄격하게 판단하지 마십시오. WPF 릴레이 명령 또는 DelegateCommand 클래스의 구현에는 그러한 이벤트 핸들러가 있습니다.

/// <summary>
/// Occurs whenever the state of the application changes such that the result
/// of a call to <see cref="CanExecute"/> may return a different value.
/// </summary>
public event EventHandler CanExecuteChanged
{
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}

그러나 네임 스페이스의 SL 하위 집합에는 CommandManager 클래스가 없습니다. 그리고 이것이 내가 붙어있는 곳입니다. 나는 SL에 대한 MVVM 채택에서 이것에 대한 해결 방법을 아직 찾지 못했습니다 (프리즘은 아직 너무 복잡합니다). 다른 간단한 helloworldmvvm 앱은 전혀 다루지 않습니다.

미리 감사 드리며 영어에 대해 죄송합니다 -)

도움이 되었습니까?

해결책

Silverlight의 명령에 대한 지원은 없습니다. 사용자가 귀하의 뷰에서 컨트롤을 조작 할 때 귀하의 뷰를 위해 Code-Behind의 뷰 모델을 수정하는 코드 (예 : 이벤트 처리기)를 작성해야합니다. 사용자가보기에서 버튼을 클릭 할 때 뷰 모델에서 메소드를 호출하는 것만 큼 간단 할 수 있습니다. 프리즘을 사용하면 XAML에 첨부 된 속성을 만들 수 있으며 이러한 이벤트 핸들러를 제거 할 수 있지만 프리즘을 사용하지 않으면 이벤트 처리기를 사용하는 데 고수 할 수 있습니다.

처리해야 할 또 다른 측면은 뷰 모델이 변경 될 때보기를 수정하는 것입니다. 특히 뷰 모델의 상태에 따라 컨트롤을 활성화하고 비활성화하려고합니다. 이를 달성하려면 묶어야합니다 IsEnabled 특정 작업이 허용되는 경우 반영되는 뷰 모델의 무언가에 대한 제어의 특성. 사용자 정의 구현 IValueConverter 부울 값으로 변환하는 물체는 종종 유용합니다. 예를 들어, 뷰 모델에 카운트를 나타내는 속성이 있고 뷰의 특정 컨트롤이 카운트가 0보다 클 때만 활성화되도록 특정 컨트롤을 원하는 경우로 변환하는 값 변환기를 만들 수 있습니다. true 숫자가 0보다 크고 바인딩 에이 값 변환기를 사용하는 경우.

MVVM 응용 프로그램의 WPF 예제를 조정하려고하면 모든 명령의 모든 사용을 제거하고 자신의 코드를 대체해야합니다. 예제의 코드는 Silverligt에서는 의미가 없지만 WPF에서는 뷰의 제어가 활성화되고 표시되는 등을 결정하는 과정에 관여합니다.

다른 팁

Silverlight 4.0은 Icommand 인터페이스를 지원하므로 명령 인프라와 같은 WPF를 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top