我得到一个警告,这可能是一个主观问题,可能会被关闭,但无论如何我都会问.
我基本上试图从一个从MainWindow中加载的UserControl访问WPF应用程序中的MainWindow上的按钮.
我正在从UserControl的代码后面这样访问它:
((MainWindow)Application.Current.MainWindow).btnNext
Run Code Online (Sandbox Code Playgroud)
但它确实看起来很混乱,从我读过的内容来看,它并不是最佳实践.任何人都能够提供一个答案,构成从MainWindow的当前实例访问控件/属性的最佳实践 - 或者任何其他活动的窗口/视图?
我对 WPF 相当新手。我的理解是模型中的数据发生变化,它应该通知视图模型,并且视图将绑定到视图模型中的属性和类似的东西。它是否正确?如果是这样,我一直在读该模型应该实现INotifyPropertyChanged
,并且看起来像这样
public class LoginModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
public bool Authenticated { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的 ViewModel 中,我有一个属性“AuthResult”,它应该从模型属性“Authenticated”获取更新
public partial class view1 : UserControl, INotifyPropertyChanged{
public bool AuthResult
{
get
{
return _authVal;
}
set
{
_authVal = value;
NotifyPropertyChanged("AuthResult");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
}
Run Code Online (Sandbox Code Playgroud)
我知道当前的实施是不正确的。我发现我应该从我的模型订阅 PropertyChanged 通知,如下所示:
LoginModel.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(LoginModel_PropertyChanged); …
Run Code Online (Sandbox Code Playgroud)