如何在 ViewModel 类中调用 TranslateTo?
Posted
技术标签:
【中文标题】如何在 ViewModel 类中调用 TranslateTo?【英文标题】:How to call TranslateTo in ViewModel class? 【发布时间】:2021-08-06 06:31:20 【问题描述】:我在 google 上找到了这段代码,它会震动“Entry”字段。问题是这段代码是用于视图而不是视图模型...是否可以将此代码转换为在视图模型中调用?
更新:在后视图中出现错误:“LoginPage”不包含“OnLoginFailed”的定义,并且没有可访问的扩展方法“OnLoginFailed”接受“LoginPage”类型的第一个参数找到(您是否缺少 using 指令或程序集引用?)
查看
<Ellipse x:Name="Ellipse1" />
查看背后
public LoginPage()
InitializeComponent();
var viewModel = new LoginPage();
BindingContext = viewModel;
viewModel.OnLoginFailed = ((obj) =>
uint timeout = 50;
Ellipse1.TranslateTo(-15, 0, timeout);
Ellipse1.TranslateTo(15, 0, timeout);
Ellipse1.TranslateTo(-10, 0, timeout);
Ellipse1.TranslateTo(10, 0, timeout);
Ellipse1.TranslateTo(-5, 0, timeout);
Ellipse1.TranslateTo(5, 0, timeout);
Ellipse1.TranslationX = 0;
);
视图模型
async void OnSubmitButtonClick()
...
if(wrongPassword)
// i want to shake my Entry here. but viewmodel doesnt have access to "MyEntry" non "TranslateTo"
OnLoginFailed?.Invoke(true);
public Action<bool> OnLoginFailed get; set;
【问题讨论】:
如果不可能,我将不得不在视图中完成所有后端编码 TranslateTo 作用于 ui 元素,所以如果您关心 mvvm,我会说它应该在后面的代码中调用,而不是在 vm 中调用。 我明白了,有道理。我可以在 View 中添加 TranslateTo 代码。但是有没有办法在VM中调用该方法?我猜不是根据你们说的。但我应该确保 是的,我已经指出了这一点。当需要触发动画时,您的 VM 可以引发 View 可以订阅的事件。 太棒了!这一切真的很有帮助。我能够在我的虚拟机中引发一个事件来调用视图...但在我的视图中出现错误 【参考方案1】:有错别字
改变
var viewModel = new LoginPage();
到
var viewModel = new LoginViewModel();
【讨论】:
以上是关于如何在 ViewModel 类中调用 TranslateTo?的主要内容,如果未能解决你的问题,请参考以下文章
在 ViewModel SwiftUI 类中存储 Firebase 云消息传递令牌
如何使用 mvvm 模式从不同的 ViewModel 获取属性和调用命令