将按钮的IsEnabled属性绑定到一个属性上

3
我有一个已经实现了INotifyPropertyChanged的类。这个类叫做UserInfo,其中包含一个布尔类型的变量isuserLoggedIn。 现在在我的主窗体中,我有一些按钮,我希望将它们的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个回答

2
您需要将您的视图的DataContext设置为UserInfo类的实例。然后将您的按钮的IsEnabled属性绑定到UserInfo视图模型上的UserIsLoggedIn布尔属性。以下是将元素属性绑定到相应视图模型上的属性的示例:将GridView选定项值传递到不同Usercontrol的不同ViewModel 在查看您的编辑后,您需要再次将视图的DataContext设置为currentUser对象,然后删除按钮的IsEnabled绑定表达式中的ElementName部分。

但是我已经在MainWindow中声明了UserInfo类的一个实例UserInfo currentUser = UserInfo.GetUserInfo();,并且按钮的绑定如下:<Button IsEnabled="{Binding ElementName=currentUser, Path=UserLoggedIn}"/>为什么我还需要设置DataContext? - xaria
我认为您对Silverlight和WPF中数据绑定的工作原理有些误解。您的绑定表达式将在视图的数据上下文中查找匹配的属性。元素绑定是指将一个XAML元素的值绑定到另一个XAML元素的属性。 - KodeKreachor

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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接