从 Avalonia 中的视图模型触发用户控制操作

问题描述 投票:0回答:1

我在 Avalonia 11 应用程序中使用 PanAndZoom 控件。不幸的是,似乎该控件的缩放重置只能由控件方法触发。

现在我想知道如何根据 MVVM 原理直接从视图模型触发 ResetMatrix 操作。

目前,我在视图的代码隐藏中调用此方法:

public partial class VideoView : UserControl
{
    #region Public Constructors

    public VideoView()
    {
        InitializeComponent();

        var zoomBorder = this.FindControl<ZoomBorder>("VideoBorder");
        var dataContext = this.DataContext as VideoViewModel;

        if (dataContext != default
            && zoomBorder != default)
        {
            dataContext.OnVideoCentredEvent += (s, e) => zoomBorder.ResetMatrix();
        }
    }

    #endregion Public Constructors
}

我已经找到了这个答案,但我无法将其调整为 Avalonia 11 中可用的依赖属性。

我正在寻找一种很可能基于行为的解决方案。但也许还有其他解决方案,我还没有找到。

mvvm user-controls code-behind behavior avalonia
1个回答
0
投票

MVVM 的意思是“无代码隐藏”,这是一个常见的误解。 MVVM 意味着视图逻辑应该仅通过松散耦合与业务逻辑交互(即单向通信和事件/回调并使用 INotifyPropertyChanged 通过 ViewModel 传递)。这里所拥有的是纯视图逻辑,它连接到视图模型中的操作,这在概念上与绑定没有什么不同。 View 注册一个事件,ViewModel 没有按照 MVVM 的规定直接引用 View。这里仍然是 MVVM 模式。

你可以使用Avalonia Behaviours,但说实话,对于这个小小的事件连接来说,这有点过分了,它会让你的代码变得复杂,而且只要遵循 MVVM 模式,后面的代码就没有任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.