绑定按钮IsEnabled属性

时间:2012-04-05 03:33:40

标签: wpf binding inotifypropertychanged isenabled

我有一个已实施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 个答案:

答案 0 :(得分:2)

您需要将视图的DataContext设置为UserInfo类的实例。然后将按钮的IsEnabled属性绑定到UserInfo视图模型上的UserIsLoggedIn布尔属性。以下是将元素的属性绑定到相应视图模型上的属性的示例:passing a gridview selected item value to a different ViewModel of different Usercontrol

看到你的编辑后,你将再次需要将视图的DataContext设置为currentUser对象,然后删除按钮的IsEnabled绑定表达式的ElementName部分。

答案 1 :(得分:0)

您可以将IsEnabled绑定到用户名文本框的Length

<TextBox Name="usernameTxt" Width="100" Height="30"/>
<Button Content="SomeButton " Width="100" Height="30" 
  IsEnabled="{Binding ElementName=usernameTxt, Path=Text.Length, Mode=OneWay}"></Button>