DelegateCommand
속성을 사용하여 Button
의 Command
속성에 바인딩하는 ViewModel이 있습니다.PRISM DelegateCommand + 샘플 데이터
문제는 샘플 데이터가 DelegateCommand
개체를 좋아하지 않는다는 것입니다. 그것은 불평한다 : The type "DelegateCommand" does not include any accessible constructors.
또한 노출 유일한 속성은 IsActive
속성입니다.
<local:MyViewModel xmlns:local="clr-namespace:MyNamespace"
xmlns:prism="http://www.codeplex.com/prism">
<local:MyViewModel.Age>47</local:MyViewModel.Age>
<local:MyViewModel.PurchaseAlcohalCommand>
<prism:DelegateCommand IsActive="True" />
</local:MyViewModel.PurchaseAlcohalCommand>
</local:MyViewModel>
내 DelegateCommand를 비공개로 설정하고 명령을 ICommand로 캐스팅하는 "래퍼"속성을 노출하려고 생각한 경우 ICommand의 일부가 아니기 때문에 'PurchaseAlcohalCommand.RaiseCanExecuteChanged()'와 같은 호출을 수행 할 수 없습니다. 인터페이스를 사용하려고 할 때마다 DelegateCommand로 다시 캐스팅하지 않아도됩니다. –
아, CommandManager 클래스에 의존하기 때문에 RelayCommand를 사용할 계획이 없습니다. –
이것은 대개 내 명령을 표시하는 방법이며 샘플 데이터에서이 문제를 보지 못했습니다. 그래서 나는 어느 문제가 당신을 더 괴롭 히 느냐고 추측한다. 일반적으로 나는 당신이 발견 한 문제로 인해 다른 사람들이 ICommand를 구현하는 것을 피합니다 : 명령 객체에 상태를 업데이트하도록 알리기가 어렵습니다. OO 설계 원칙 (특히 캡슐화)에 따르면, 명령 자체는 업데이트시기를 알아야합니다. 업데이트하라는 메시지는 필요하지 않습니다. –