【问题标题】:How to call TranslateTo in ViewModel class?如何在 ViewModel 类中调用 TranslateTo?
【发布时间】: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


【解决方案1】:

有错别字

改变

 var viewModel = new LoginPage();

var viewModel = new LoginViewModel();

【讨论】:

    猜你喜欢
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    相关资源
    最近更新 更多