我正在开发一个示例,其中Messaging Center将状态消息从设备代码发送到我的视图模型而未耦合。此时,在尝试在View模型中使用之前,我使用了一条警报消息来通知事件。
为此,我在共享应用程序构造函数(App.xaml)中使用了静态视图实例,在视图构造函数中我为状态下标。
应用(共享)
public partial class App : Application
{
#region MasterDetailPage
public static MasterDetailPage MDP;
public static NavigationPage NAV = null;
public static MainView _mainpage;
#endregion
public App ()
{
InitializeComponent();
NAV = new NavigationPage(new StarterView()) { BarBackgroundColor = Color.FromHex("701424"), BarTextColor = Color.White }; ;
MDP = new MasterDetailPage();
MDP.BackgroundColor = Xamarin.Forms.Color.FromHex("701424");
_mainpage = new MainView();
MDP.Master = _mainpage;
MDP.Detail = NAV;
MainPage = MDP;
MainPage.Title = "H2X";
}
(查看共享的图片)
public MainView ()
{
InitializeComponent ();
string a="Test";
#region MessegeCenter
MessagingCenter.Subscribe<string,string>("APP", "Message_Received", async (sender,arg) =>
{
string b = a;
a = $"{arg}";
await DisplayAlert("Atenção", a+b, "Ok");
});
#endregion
}
在特定的平台代码(设备-UWP)中,我创建了一个计时器,该计时器在主页构造函数中指定的时间过后发送消息。
void dispatcherTimer_Tick(object sender, object e)
{
DateTimeOffset time = DateTimeOffset.Now;
TimeSpan span = time - lastTime;
lastTime = time;
//Time since last tick should be very very close to Interval
TimerLog.Text += timesTicked + "\t time since last tick: " + span.ToString() + "\n";
timesTicked++;
if (timesTicked > timesToTick)
{
MessagingCenter.Send<string,string>("APP","Message_Received","MR");
}
}
当我运行它时,打开了两次具有相同文本的警报消息,但是没有两个订阅。相同的文本为我提供了来自同一发送事件的信息。
问题出在哪里?与我的静态视图有关系吗?
提前谢谢
吉尔赫姆
答案 0 :(得分:0)
始终退订MessagingCenter是一个好习惯。
MessagingCenter.Unsubscribe<string, string>(this, "Message_Received");
如果MessagingCenter订阅了两次,则将调用两次函数。