2012-04-05 2 views
2

У меня есть класс, который реализовал INotifyPropertyChanged. Этот класс UserInfo имеет логическую переменную isuserLoggedIn. Теперь в моей основной форме у меня есть кнопки, чей 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 ваш взгляд на экземпляр вашего класса UserInfo. Затем привяжите свойство IsEnabled вашей кнопки к свойству UserIsLoggedIn boolean в вашей модели представления UserInfo. Ниже приведен пример привязки атрибута элемента к свойству в соответствующей модели представления: passing a gridview selected item value to a different ViewModel of different Usercontrol

После просмотра вашего редактирования вам снова необходимо установить DataContext вашего представления на объект currentUser, а затем удалить часть ElementName из выражение привязки вашей кнопки IsEnabled.

+0

Но я уже объявил экземпляр класса UserInfo в MainWindow UserInfo currentUser = UserInfo.GetUserInfo(); и Button имеет привязку следующим образом:

+0

Я думаю, что у вас есть небольшое недоразумение о том, как привязка данных работает в Silverlight и WPF. Ваши выражения привязки будут искать подходящее свойство в контексте данных представления. Связывание элементов относится к привязке значения одного элемента XAML к атрибуту другого элемента XAML. – KodeKreachor

Смежные вопросы