2012-04-05 57 views
2

我有一個類實施了INotifyPropertyChanged。這個類UserInfo有一個布爾變量isuserLoggedIn。 現在在我的mainform中,我有一個按鈕,它的isEnabled我希望綁定到UserInfo.isuserLoggedIn綁定按鈕被啓用到屬性

如何做到這一點?

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的設置爲您的UserInfo類的一個實例。然後將您的按鈕的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();並按鈕具有如下綁定:

+0

我認爲你對Silverlight和WPF中數據綁定的工作原理有一點誤解。您的綁定表達式將在視圖的數據上下文中查找匹配屬性。元素綁定是指將一個XAML元素的值綁定到另一個XAML元素的屬性。 – KodeKreachor 2012-04-05 03:59:39

相關問題