【发布时间】: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 可以订阅的事件。
-
太棒了!这一切真的很有帮助。我能够在我的虚拟机中引发一个事件来调用视图...但在我的视图中出现错误
标签: c# xamarin xamarin.forms mvvm