2012-04-05 6 views
2

INotifyPropertyChanged을 구현 한 클래스가 있습니다. 이 클래스 UserInfo에는 isLoggedIn이라는 부울 변수가 있습니다. 이제는 내 mainform에서 isEnabled 버튼을 UserInfo.isuserLoggedIn에 바인드하고 싶습니다.바인딩 버튼 IsEnabled 속성에

어떻게 수행하나요? 메인에서

public class UserInfo : INotifyPropertyChanged 
    { 
     private static readonly UserInfo _instance = new UserInfo(); 
     private string username; 

     private bool isLoggedIn; 

     public string UserName 
     { 
      get { return username; } 
      set 
      { 
       username = value; 
       NotifyPropertyChanged("UserName"); 
      } 
     } 

     public bool UserLoggedIn 
     { 
      get { return isLoggedIn; } 
      set 
      { 
       isLoggedIn = value; 
       NotifyPropertyChanged("UserLoggedIn"); 
      } 
     } 


     public event PropertyChangedEventHandler PropertyChanged; 

     public void NotifyPropertyChanged(string propertyName) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     }    

    public static UserInfo GetUserInfo() 
    { 
     return _instance; 
    } 

} 

나는이 :

public class MainWindow 
{ 
    UserInfo currentUser = UserInfo.GetUserInfo(); 
} 

XAML은 다음과 같습니다

<Button IsEnabled="{Binding ElementName=currentUser, Path=UserLoggedIn}"/> 

답변

2

당신은 당신의 사용자 정보 클래스의 인스턴스에보기의 DataContext를 설정해야합니다. 그런 다음 단추의 IsEnabled 속성을 UserInfo 뷰 모델의 UserIsLoggedIn 부울 속성에 바인딩합니다. 다음은 해당 뷰 모델의 속성에 요소의 속성을 바인딩하는 예제입니다. passing a gridview selected item value to a different ViewModel of different Usercontrol

편집을보고 나면 다시 뷰의 DataContext를 currentUser 객체로 설정 한 다음에 ElementName 부분을 제거해야합니다. 단추의 IsEnabled 바인딩 식.

+0

하지만 MainWindow UserInfo에서 UserInfo 클래스의 인스턴스를 이미 선언했습니다. currentUser = UserInfo.GetUserInfo(); Button은 다음과 같이 바인딩됩니다.

+0

Silverlight 및 WPF에서 데이터 바인딩이 작동하는 방식에 대해 약간의 오해가 있다고 생각합니다. 바인딩 표현식은 뷰의 데이터 컨텍스트에서 일치하는 특성을 찾습니다. 요소 바인딩은 하나의 XAML 요소 값을 다른 XAML 요소의 특성에 바인딩하는 것을 의미합니다. – KodeKreachor

관련 문제