小编gan*_*eii的帖子

获取当前MainWindow实例的WPF最佳实践?

我得到一个警告,这可能是一个主观问题,可能会被关闭,但无论如何我都会问.

我基本上试图从一个从MainWindow中加载的UserControl访问WPF应用程序中的MainWindow上的按钮.

我正在从UserControl的代码后面这样访问它:

((MainWindow)Application.Current.MainWindow).btnNext
Run Code Online (Sandbox Code Playgroud)

但它确实看起来很混乱,从我读过的内容来看,它并不是最佳实践.任何人都能够提供一个答案,构成从MainWindow的当前实例访问控件/属性的最佳实践 - 或者任何其他活动的窗口/视图?

wpf instance

2
推荐指数
1
解决办法
7074
查看次数

从模型更新 ViewModel 中的属性的正确方法

我对 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)

wpf notifications model mvvm viewmodel

0
推荐指数
1
解决办法
9732
查看次数

标签 统计

wpf ×2

instance ×1

model ×1

mvvm ×1

notifications ×1

viewmodel ×1