![](/img/trans.png)
[英]How can I handle async and await when using Xamarin MessagingCenter calling an async method?
[英]Xamarin - How to trigger an animation using a MessagingCenter
我有一個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
但都沒有奏效。
嘗試做一些這樣的事情,希望它會有所幫助。
用於 SEND 的消息中心
MessagingCenter.Send(this, "SideMenuViewModel:IsMenuOpen", IsMenuOpen); //IsMenuOpen - is the bool value for your situation
訂閱的消息中心
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);
}
});
您的 bool 值將在 subscribe 的IsMenuOpen
參數中獲取。 這將僅在 MessagingCenter 內具有本地范圍。
讓我知道它是否工作正常...
await SwipeContent.ScaleYTo(1, 300, Easing.SinOut);
ScaleTo
方法獲取動畫開始時的當前Scale
屬性值(默認值為 1),然后從該值縮放到它的第一個參數, 1
似乎意味着沒有變化,您嘗試將其更改為一個值不是1
。
喜歡:
await SwipeContent.ScaleYTo(1.5, 300, Easing.SinOut);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.