MVVM OnPropertyChanged not working



我有PropertyChanged事件的问题,因为它总是空的,我一直试图设置DataContext的许多方式,但它总是为空,这里是一些代码:

    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
        {
            var e = new PropertyChangedEventArgs(propertyName);
            handler(this, e);
        }
    }

在App类中重载OnStartup方法

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        MainWindow window = new MainWindow();
        MainWindowViewModel mwvm = new MainWindowViewModel();
        window.DataContext = mwvm;
        window.Show();
    }

public class MainWindowViewModel : ViewModelBase
{
    private ICommand _ChangePageCommand;
    private IPageViewModel _CurrentPageViewModel;
    private List<IPageViewModel> _PageViewModels;
    public List<IPageViewModel> PageViewModels
    {
        get
        {
            if (_PageViewModels == null)
                _PageViewModels = new List<IPageViewModel>();
            return _PageViewModels;
        }
    }
    public IPageViewModel CurrentPageViewModel
    {
        get
        {
            return _CurrentPageViewModel;
        }
        set
        {
            if (_CurrentPageViewModel != value)
            {
                _CurrentPageViewModel = value;
                OnPropertyChanged("CurrentPageViewModel");
            }
        }
    }
    public ICommand ChangePageCommand
    {
        get
        {
            if (_ChangePageCommand == null)
            {
                _ChangePageCommand = new RelayCommand(
                                        p => ChangeViewModel((IPageViewModel)p),
                                        p => p is IPageViewModel);
            }
            return _ChangePageCommand;
        }
    }
    public MainWindowViewModel()
    {
        PageViewModels.Add(new FtpSettingsViewModel());
        CurrentPageViewModel = PageViewModels[0];
    }

    private void ChangeViewModel(IPageViewModel p)
    {
        if (!PageViewModels.Contains(p))
            PageViewModels.Add(p);
        CurrentPageViewModel = PageViewModels.FirstOrDefault(vm => vm == p);
    }
}

我不知道怎么了

我不知道你的PropertyChanged是哪个类声明的,但附加在INTERFACE引用上,所以。net的其余部分知道它可以使用它。

public class MainWindowViewModel : ViewModelBase, INotifyPropertyChanged
{
   // then your declaration of the OnPropertyChanged...
}

仅仅公开事件并不意味着。net框架的其余部分都与它挂钩。您可能还必须确保视图中的属性通过绑定"连接"起来,例如在xaml…

中。
<Label Content={Binding PropertyOnYourViewModel, NotifyOnSourceUpdated=True}" />

所以当"PropertyOnYourViewModel"被改变时,这个标签已经注册到"OnPropertyChanged"通知过程。

您指的是这段代码中的"处理程序"吗?

PropertyChangedEventHandler handler = this.PropertyChanged;

如果是这样,如果我的假设是正确的,它是你的ViewModelBase实现的一部分,请确保你也从INotifyPropertyChanged继承,并在你的CurrentPageViewModel属性的后续设置,你会注意到它将不再为空。

相关内容

  • 没有找到相关文章

最新更新