我有一个ContentView,它订阅来自ViewModel的MessagingCenter消息(以便通过不将视图耦合到viewModel来维护mvvm模式)。当消息被ContentView接收到时,我想让它执行一个动画,使卷帘视图可见,如下所示:
MessagingCenter.Subscribe<SideMenuViewModel>(this, "IsMenuOpen", async (sender) =>
{
if (sender.IsMenuOpen)
{
MainSwipeView.Open(OpenSwipeItem.RightItems);
await SwipeContent.ScaleYTo(1, 300, Easing.SinOut);
}
else
{
MainSwipeView.Close();
await SwipeContent.ScaleYTo(1, 300, Easing.SinOut);
}
});此动画与我在同一文件的其他事件侦听器中的动画相同,并且运行良好。但是,在MessagingCenter中,执行链运行良好,它调用动画方法,但没有动画发生。
这可能是一个线程问题吗?我尝试过await和BeginInvokeOnMainThread,但都不起作用。
发布于 2020-09-15 19:06:35
试着这样做,希望能有所帮助。
用于发送的
MessagingCenter
MessagingCenter.Send(this, "SideMenuViewModel:IsMenuOpen", IsMenuOpen); //IsMenuOpen - is the bool value for your situation适用于订阅的
MessagingCenter
MessagingCenter.Subscribe<SideMenuViewModel, bool>(this, "SideMenuViewModel:IsMenuOpen", (sender, IsMenuOpen) =>
{
if (IsMenuOpen)
{
MainSwipeView.Open(OpenSwipeItem.RightItems);
await SwipeContent.ScaleYTo(1, 300, Easing.SinOut);
}
else
{
MainSwipeView.Close();
await SwipeContent.ScaleYTo(1, 300, Easing.SinOut);
}
});您的布尔值将在subscribe的IsMenuOpen参数中获取。它的作用域仅限于MessagingCenter。
让我知道它是否正常工作...
发布于 2020-09-16 15:13:18
await SwipeContent.ScaleYTo(1, 300, Easing.SinOut);
ScaleTo方法获取动画开始的当前Scale属性值(默认值为1),然后从该值缩放到其第一个参数,1似乎表示没有更改,您尝试将其更改为非1的值。
像这样:
await SwipeContent.ScaleYTo(1.5, 300, Easing.SinOut);https://stackoverflow.com/questions/63898912
复制相似问题