![](/img/trans.png)
[英]delete cell from listview and database fire base in xamarin forms
[英]Fire a method on Property Change in Xamarin Forms
我正在尝试调用属性更改的方法,当收到我的 Fire-base 推送通知时,此属性当前会更改,现在当发生这种情况时,我想触发一个方法,然后显示 DisplayAlert。
为什么? 因为我基本上有闪购,它们从我的 API 中分成一个类别,我可以通过名称获取它们,所以当我创建通知时,我将标题作为名称传递,显示警报会弹出,他们单击确定,然后将其带到那个页面并设置名称我需要获取正确的“闪购”
至少这是我对此的解决方案
到目前为止我的尝试
应用程序
Myapp.Views.Home mPage;
CrossFirebasePushNotification.Current.Subscribe("general");
CrossFirebasePushNotification.Current.OnTokenRefresh += (s, p) =>
{
System.Diagnostics.Debug.WriteLine($"TOKEN REC: {p.Token}");
};
System.Diagnostics.Debug.WriteLine($"TOKEN: {CrossFirebasePushNotification.Current.Token}");
CrossFirebasePushNotification.Current.OnNotificationReceived += (s, p) =>
{
try
{
System.Diagnostics.Debug.WriteLine("Received");
if (p.Data.ContainsKey("body"))
{
Device.BeginInvokeOnMainThread(() =>
{
mPage.Message = $"{p.Data["body"]}";
});
}
}
catch (Exception ex)
{
}
};
CrossFirebasePushNotification.Current.OnNotificationOpened += (s, p) =>
{
//System.Diagnostics.Debug.WriteLine(p.Identifier);
System.Diagnostics.Debug.WriteLine("Opened");
foreach (var data in p.Data)
{
System.Diagnostics.Debug.WriteLine($"{data.Key} : {data.Value}");
}
if (!string.IsNullOrEmpty(p.Identifier))
{
Device.BeginInvokeOnMainThread(() =>
{
});
}
else if (p.Data.ContainsKey("color"))
{
Device.BeginInvokeOnMainThread(() =>
{
mPage.Navigation.PushAsync(new ContentPage()
{
BackgroundColor = Color.FromHex($"{p.Data["color"]}")
});
});
}
else if (p.Data.ContainsKey("aps.alert.title"))
{
Device.BeginInvokeOnMainThread(() =>
{
mPage.TitleMessage = $"{p.Data["aps.alert.title"]}";
});
}
};
家
public string Message
{
get
{
return Message;
}
set
{
Message = value;
RaisePropertyChanged("Message");
}
}
public string TitleMessage
{
get
{
return TitleMessage;
}
set
{
TitleMessage = value;
RaisePropertyChanged("TitleMessage");
}
}
protected void RaisePropertyChanged(string propertyName = "")
{
if (PropertyChanged != null)
{
App.Current.MainPage.DisplayAlert(TitleMessage, Message, "ok");
}
}
“应用程序只是在一段时间后崩溃”可能是因为您试图在 UI 线程之外显示对话框。
if (PropertyChanged != null)
{
App.Current.MainPage.DisplayAlert(TitleMessage, Message, "ok");
}
在检查了 PropertyChanged 事件的订阅者之后,您需要实际调用事件而不是尝试显示警报。 订阅者的事件处理程序然后可以处理显示警报。
例如
if (PropertyChanged != null)
{
PropertyChanged.Invoke(this, <your event args>);
}
可以使用 null 条件运算符将其缩短为:
PropertyChanged?.Invoke(this, <your event args>);
然后,处理对话框显示的类可以像这样订阅:
yourInstanceName.PropertyChanged += HandleMyDialog;
如果我理解正确,您可以执行以下操作。 如果 TitleMessage 更改,这将运行 MyMethod:
public string TitleMessage
{
get
{
return TitleMessage;
}
set
{
if(TitleMessage != value){
TitleMessage = value;
RaisePropertyChanged("TitleMessage");
MyMethod();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.