EventToCommand 를 하나만 정의하고 여러 컨트롤에 적용할 수 있나요??

안녕하세요.
동일한 이벤트 처리를 여러 컨트롤에 적용 시키고 싶어 질문드립니다.
툴은 DevExpress 사용하고 있어서 데브에서 제공하는

<dxmvvm:Interaction.Behaviors>
    <dxmvvm:EventToCommand
</dxmvvm:Interaction.Behaviors>

를 사용해서 버튼의 Click 이벤트에 대해 Command를 연결했습니다.

근데 여러 버튼에 동일한 Click 이벤트 처리 Command를 적용해서 Command 에서 실행하는 Excute() 함수 내부에서 버튼에서 제공 받는 데이터에 따른 처리를 하고 싶어서요…

제가 나름 해보고 찾아본 것은 결국 따로따로 다 할당하게 되더라구요…

DevExpress를 사용하는 방법이 아니라도 상관없습니다.

혹시 이런 걸 하고 싶을 때 어떤 방법이 있을지 선배님들께 여쭤봅니답…

2개의 좋아요

리소스에서 스타일로 만들면 되지않을까요?
컨텐츠 컨트롤 스타일로 만들어서…하하하

3개의 좋아요

위의 글에 의하면 CommandParameter에 의해 명령어에서 분기가 가능할 것으로 보이는데요, DevExpress가 아니더라도 Command Behavior의 경우 아마 대부분 CommandParameter를 쓸 수 있도록 되어 있을 것 같습니다.

이 부분이 잘 이해가 안되는데요, 버튼을 눌렀을 때 어떤 버튼을 눌렀는가를 명령어 관점에서 식별자와 함께 명령어로 필요한 정보를 전달하면 될 것입니다.

6개의 좋아요

예를 들어
버튼을 통해 숫자를 입력받는 상황이 있다고하면
1~9 까지의 버튼이 있는데
하나의 EventToCommand를 9개 버튼에 적용하는 것을 하고싶어서요,

지금은
버튼 하나마다 일일이 EventToCommand 를 설정해서 사용중입니당…

2개의 좋아요

궁금해서 그런데 혹시

기본적인 ICommand를 안쓰고
Click이벤트를 통한 EventToCommand를 써야 하는 이유가 있나요?

4개의 좋아요

아니요 특별한 이유는 없습니다…
한 번 써보고 싶어서 사용했습니답…ㅎㅎ

2개의 좋아요

단순한 Click 처리 하면
그냥 ICommand로 처리 하시고

하나의 Command를 사용해서
CommandParameter로 각 버튼에서 데이터를 전달 하시면 됩니다.


정 EventToCommand를 써야 한다면, 그리고 DevExpress 의 EventToCommand가 아닌
기본적인 System.Windows.Ineractivity.dll의 EventToCommand를 사용하신다면

MVVM 패턴 규칙을 생각하지 않고 가장 빠르고 단순하게 처리 하는 방법은
버튼의 Tag에 전달할 값을 상수 또는 바인딩으로 처리 해 놓고

PassEventArgsToCommand 속성을 True로 설정 하시면

ViewModel에서 Click이벤트의 시그니처 그대로 파라메터로 받아서 사용할 수 있기 때문에
sender를 통해 Tag 속성에 할당된 값을 사용 할 수 있습니다.

즉,

private void Execute(object sender, RoutedEventArgs e)
{
  if(sender as Button button) {
    var data = button.Tag;
  }
}

형태로 처리 할 수 있습니다.

하지만 저렇게 하신다면 ViewModel에서 View가 참조 됨으로 MVVM 위배로 판단합니다.

MVVM 규칙을 지키면서 처리한다면 비헤이비어를 통해 처리 하는 방법도 있습니다.

7개의 좋아요

비헤이비어를 한 번 해보겠습니다 감사합니다 ㅎㅎ

2개의 좋아요