0

MVVM 및 사용자 컨트롤 이벤트와 혼동되지 않습니다.Silverlight 사용자 컨트롤 이벤트 및 MVVM

내보기에는 사용자 정의 컨트롤이 있습니다. 그것은 읽기와 편집의 두 가지 모드를 가지고 있습니다. (텍스트 모드)

<Grid 
     x:Name="LayoutRoot" 
     Background="Transparent"> 


       <controls:MyUserControl 
          Mode="{Binding Path=TextMode,Mode=TwoWay}" 
          Text="{Binding Path=ReportText,Mode=TwoWay}" 

       </controls:MyUserControl>   

</Grid> 

텍스트 모드는, 내가 전화 Applicationbar에 '저장'버튼을 추가하려면 '편집'로 변경하고 저장 버튼을 클릭하면 사용자 컨트롤에서 텍스트를 저장할 . 또한 '읽기'보기에서 저장 버튼을 비활성화하고 싶습니다. (예 : TextMode가 '읽기'인 경우)

올바른 MVVM 방법은 무엇입니까? 나는 두 가지 방법을 생각했다. : 1) 사용자 컨트롤에 ModeChanged 속성을 노출시키고보기에 그것을 전파 한 다음 Save 버튼을 추가하는 것을 생각했다. (그러나 그것은 MVVM 방식, 즉 코드 뒤에 코드가있는 것을 반대합니까?).

2) 종속성 자체의 propertychanged를 처리하고 저장 버튼을 사용자 정의 컨트롤에서 추가합니다. (응용 프로그램 논리가 사용자 정의 컨트롤에서 혼합되면 올바르게 보이지 않음)

어떻게이 뷰 모델을 포함합니까?

MVVM을 따르는 작업을 수행하는 좋은 방법은 무엇입니까?

답변

1

ApplicationBar는 DependencyObject가 아니므로 데이터 바인딩 할 수 없습니다. 따라서 MVVM의 특성에 대해 신경 쓸 필요가 없습니다.

MVVM의 목적은 비즈니스 로직을 UI에서 분리하는 것입니다. 따라서 MVVM은 코드 숨김을 종교적으로 피하는 것이 아닙니다. 사실 위험 요소 중 하나는 코드 숨김을 두려워 View Model에 너무 많은 책임을 부과하려는 것입니다.

마지막으로 고려해야 할 사항은 전능 한 MVVM 패턴을 깨는 것입니다. 그렇게하려는 경우 다른 사람이 수행 한 작업을 파악해야하는 경우에만 문제가됩니다. 대부분의 개발자 팀은 다른 모든 가능성을 소진 한 후 (그리고 30 분 이상을 낭비) 코드 숨김 코드를 찾습니다. 그러나 ApplicationBar의 경우 다른 위치는 없습니다.

요약하면 첫 번째 옵션에는 아무런 문제가 없습니다.