如何在 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 获取属性和调用命令

如何通过 Viewmodel 调用 sqlite 方法?

Classifier 没有伴生对象,因此必须在这里初始化

ViewModel 类中未设置对象,控制直接从数据访问类移动到 View

在 ViewModel 后面的视图代码中调用方法?