私はINotifyPropertyChanged
を実装したクラスを持っています。このクラスUserInfo
には、boolean変数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}"/>
しかし、私はすでにMainIndexのUserInfoクラスのインスタンスを宣言しています。UserInfo = UserInfo.GetUserInfo();ボタンは次のようにバインドされています。なぜDataContextを設定する必要があるのですか? – xaria
SilverlightとWPFでデータバインディングがどのように機能するかを少し誤解していると思います。バインディング式は、ビューのデータコンテキストで一致するプロパティを探します。要素のバインディングとは、あるXAML要素の値を別のXAML要素の属性にバインドすることを指します。 – KodeKreachor