2012-05-17 5 views
0

뷰 모델의 뷰에서 메서드를 호출 할 수있는 방법이 있습니까? 그렇게하는 것이 좋은 방법입니까? 그렇지 않은 경우 뷰 모델에서 뷰의 요소를 어떻게 숨길 수 있습니까? 나는 뒤에 코드, ASP.Net 작업에 사용 해요 때문에 나는 등, 조금 혼란 스러워요뷰 모델의 뷰 메서드 호출

xaml.cs

btnsave.visibility = visibility.hidden; 
btnclose.visibility = visibility.hidden; 
뷰에 숨어있는 요소의 구체적인 예를 들어

답변

2

, ViewModel에서 이러한 요소가 표시되는 조건을 정의하는 일부 속성을 설정하려고합니다. 그런 다음 View의 해당 요소에 대한 Visibility 속성 (대부분 BooleanToVisibilityConverter 포함)을 ViewModel의 해당 속성에 바인딩합니다.

더 일반적으로 가능한 경우 직접 커플 링을 최소화하려는 경우가 있지만 때로는 "현실"이 방해가됩니다. ViewModel의 생성자에 View를 전달한 경우가 있습니다. View가 구현하고 ViewModel로 전달되는 인터페이스 인 다른 경우. 그래서 옵션이 있습니다. 그러나 당신은 그것을하기 전에 당신이 그 길을 가야 만했는지 확인해야합니다.

예 :

XAML :

<Window ...> 
    <Window.Resources> 
     <BooleanToVisibilityConverter x:Key="_B2VC" /> 
    </Window.Resources> 
    <StackPanel> 
     <Button Content="Save" Visibility="{Binding IsSaveButtonVisible}" /> 
     <Button Content="Close" Visibility="{Binding IsCloseButtonVisible}" /> 
    </StackPanel> 
</Window> 

의 ViewModel : 당신의 ViewModel 그것은 (예를 저장 말할 필요가 무엇에 대한 응답으로 해당 속성을 변경 다음

public class ViewModel: INotifyPropertyChanged 
{ 

    #region INPC Stuff 
    public event PropertyChangedEventHandler PropertyChanged; 

    private void RaisePropertyChanged(String propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
    #endregion 

    private bool _IsSaveButtonVisible; 
    public bool IsSaveButtonVisible 
    { 
     get { return _IsSaveButtonVisible; } 
     set 
     { 
      if (_IsSaveButtonVisible != value) 
      { 
       _IsSaveButtonVisible = value; 
       RaisePropertyChanged("IsSaveButtonVisible"); 
      } 
     } 
    } 

    private bool _IsCloseButtonVisible; 
    public bool IsCloseButtonVisible 
    { 
     get { return _IsCloseButtonVisible; } 
     set 
     { 
      if (_IsCloseButtonVisible != value) 
      { 
       _IsCloseButtonVisible = value; 
       RaisePropertyChanged("IsCloseButtonVisible"); 
      } 
     } 
    } 
} 

가있는 경우에만 유효합니다 그들은 뭔가를 바꿨습니다. 뭔가가 바뀌면 ViewModel의 속성이 업데이트되고 Bam이 뷰로 전파됩니다.

추가 예제가 필요하면 MVVM을 읽고 읽는 것이 좋습니다. 그것은 grok에 조금 걸린다. 그러나 사용 중에 그것은 굉장하다.

+0

내가 업데이트 한 것을 기반으로보기 모델에서 예제를 제공 할 수 있습니까? – Calvin

+0

ViewModel에보기를 전달하기 전에 ViewModel 라이브러리 중 일부에서 제공하는 간단한 메시징 기능을 살펴 보거나 직접 작성하십시오. 메시징을 테스트 할 수 있습니다. 뷰를 뷰 모델로 전달하면 VM 코드의 테스트가 훨씬 줄어 듭니다. – Robaticus

+0

예제를 추가했습니다. – Tim

관련 문제