我在 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 的意思是“无代码隐藏”,这是一个常见的误解。 MVVM 意味着视图逻辑应该仅通过松散耦合与业务逻辑交互(即单向通信和事件/回调并使用 INotifyPropertyChanged 通过 ViewModel 传递)。这里所拥有的是纯视图逻辑,它连接到视图模型中的操作,这在概念上与绑定没有什么不同。 View 注册一个事件,ViewModel 没有按照 MVVM 的规定直接引用 View。这里仍然是 MVVM 模式。
你可以使用Avalonia Behaviours,但说实话,对于这个小小的事件连接来说,这有点过分了,它会让你的代码变得复杂,而且只要遵循 MVVM 模式,后面的代码就没有任何问题。