使用MVVM模式,当视图模型中的属性发生变化时,是否可以在视图中执行方法?

本文关键字:视图 是否 执行 变化 方法 模式 MVVM 模型 使用 属性 | 更新日期: 2023-09-27 18:12:05

我想在我的应用程序中打开一个对话框,我想在视图模型中的属性被改变时关闭视图。

所以我是这样想的:

1。-在我的view.axml.cs(代码后面)我有一个名为close()的方法,执行视图的close方法。

2。-在我的视图模型中,我有一个名为ViewModelClosing的属性,一个bool

3。-视图,在某种程度上,我不知道如何,需要绑定视图模型的属性,并在属性改变时执行代码中的方法。

这可能吗?

使用MVVM模式,当视图模型中的属性发生变化时,是否可以在视图中执行方法?

Álvaro García

在我看来,最简单也是最好的方法是在你的ViewModel中接受来自控制器的iccommand。

由于ViewModel不应该依赖于View或ViewController,因此下面的解决方案使用依赖注入/控制反转。

DelegateCommand(又名RelayCommand)是ICommand

的包装器。

我将代码保持在最小值,以专注于解决方案。

public class ViewController
{
    private View _view;
    private ViewModel _viewModel;
    public ViewController()
    {
        ICommand closeView = new DelegateCommand(m => closeView());
        this._view = new View();
        this._viewModel = new ViewModel(closeView);
        this._view.DataContext = this._viewModel;
    }
    private void closeView()
    {
        this._view.close();
    }
}
public class ViewModel
{
    private bool _viewModelClosing;
    public ICommand CloseView { get;set;}
    public bool ViewModelClosing
    { 
        get { return this._viewModelClosing; }
        set
        {
            if (value != this._viewModelClosing)
            {
                this._viewModelClosing = value;
                // odd to do it this way.
                // better bind a button event in view 
                // to the ViewModel.CloseView Command
                this.closeCommand.execute();
            }
        }
    }
    public ViewModel(ICommand closeCommand)
    {
        this.CloseView = closeCommand;
    }
}