2009-10-23 2 views
1

명령 실행 후 클릭 이벤트가 발생하는 데 문제가 있습니다. MVVM 스타일의 개발을 따르려고합니다. 내 응용 프로그램에서C# 단추 Command after firing 이벤트 클릭

나는 N 버튼 (의 동적으로로드 세트가 2 N에 의해 ​​버튼의 그리드가 가끔 가끔 2 × 2,은 5 × 9 수 있습니다 : 여기

는 시나리오 , 나는 모른다). 처음에는 버튼의 모든 열이 첫 번째 열을 제외하고 숨겨집니다. 첫 번째 열을 클릭하면 명령이 실행되고 첫 번째 열에서 클릭 한 단추에 따라 페이드 인 애니메이션이 재생되고 두 번째 열에서 특정 단추가 표시됩니다. 예를 들어 첫 번째 열의 맨 위 버튼을 클릭하면 두 번째 열의 첫 번째 네 개의 버튼이 표시되고 첫 번째 열의 맨 아래 버튼은 두 번째 열의 처음 세 개의 버튼을 나타냅니다.

여기서 문제의 각 버튼

, I는 첫 번째 열의 각 버튼에 CommandParameter 세트. 명령이 실행되면 데이터가 처리되고 어떤 버튼이 눌려 졌는가를 나타내는 VM에 속성이 설정됩니다 (단지 CommandParameter를 다시 사용함). 데이터가 처리되는 동안 다음 버튼 세트를 사용자에게 표시하려고합니다. VM에서 CommandParameter를 가져 와서 적절한 버튼을 표시하는 애니메이션을 재생하는 클릭 이벤트가 있습니다.

그러나 WPF는 명령이 시작되기 전에 먼저 Click 이벤트를 수행하기를 좋아합니다. 어떤 버튼을 클릭했는지 말하는 VM의 속성이 설정되지 않기 때문에 이것은 문제가됩니다!

은 그래서

1) 이벤트를 발사하기 전에 명령을 실행할 수있는 방법이 있나요 ... 몇 가지 질문에 저를 가져온다?

2) 맞나요? : P

답변

1

클릭 이벤트 처리기를 사용하는 대신 버튼에 DataTriggers를 설정할 수 있습니다.

ViewModel의 속성에 응답하고, 표시하지 않을 버튼을 숨기고, 버튼을 표시 할 수 있습니다.

좋은 점은보기가 XAML에서 완전히 완료 될 수 있으며 ViewModel이 상태를 설정하고있는 중입니다 (예 : 저는이 상태에 있음). 바인딩이 발생할 것이므로보기가 자동으로 업데이트 된 상태로 유지됩니다. 새 DataTrigger가 실행됩니다.

+0

데이터 바인딩을 트리거하고 데이터 트리거를 사용하고 모든 것을 XAML로 전환하려고 시도하면서 모든 것을 변경하려고했습니다. 내가 가지고있는 문제는 내가로드하고있는 모든 단추가 프로그래밍 방식으로 수행되고 있기 때문입니다. 1) 배경 작업자가 동적으로로드되기 때문입니다 (비동기 적으로로드해야하고 단추 이미지가 웹 위에로드되기 때문에 필요합니다) 2) Random()을 사용하여 임의로 계산 된 Viewport2DVisual3D를 사용하여 뷰포트에서 버튼 배치가 수행됩니다. XAML 및 viewmodel에서만이 작업을 수행 할 수 있습니까? –