[英]Can not communicate with XML from ViewModel using Data binding Android
[英]Data Binding from Android project to ViewModel
我正在嘗試獲取可用wifi網絡的列表,並將其顯示在列表視圖中。 在PCL項目中,我創建了一個接口“ IWifiService”。
public interface IWifiService
{
void GetWifiList();
}
在android項目中,通過WifiService類獲取所有網絡列表。
[assembly:Dependency(typeof(WifiService))]
namespace WifiConnectivity.Droid.WifiService
{
public class WifiService : IWifiService
{
private static WifiManager wifi;
private WifiReceiver wifiReceiver;
public static List<string> WiFiNetworks;
public void GetWifiList()
{
WiFiNetworks = new List<string>();
var context = Android.App.Application.Context;
wifi = (WifiManager)context.GetSystemService(Context.WifiService);
wifiReceiver = new WifiReceiver();
context.RegisterReceiver(wifiReceiver, new IntentFilter(WifiManager.ScanResultsAvailableAction));
wifi.StartScan();
}
public class WifiReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
IList<ScanResult> scanWifiNetworks = wifi.ScanResults;
foreach(ScanResult wifinetwork in scanWifiNetworks)
{
WiFiNetworks.Add(wifinetwork.Ssid);
}
}
}
}
}
從ViewModel我正在像這樣調用一個依賴服務:
var service = DependencyService.Get<IWifiService>();
service.GetWifiList();
現在,類WifiReceiver無法返回任何內容,因此我無法在ViewModel中獲取那些網絡列表。 我如何才能將此列表放入ViewModel中?
我建議您在GetWifiList方法中返回一個List,以便界面看起來像這樣:
public interface IWifiService
{
void GetWifiList(Action<List<string>> action);
}
然后,您的GetWifiList方法將如下所示:
public static Action<List<string>> CallBackAction;
public void GetWifiList(Action<List<string>> callBackMethod)
{
WiFiNetworks = new List<string>();
var context = Android.App.Application.Context;
wifi = (WifiManager)context.GetSystemService(Context.WifiService);
wifiReceiver = new WifiReceiver();
context.RegisterReceiver(wifiReceiver, new IntentFilter(WifiManager.ScanResultsAvailableAction));
wifi.StartScan();
CallBackAction= callBackMethod;
}
然后在您的OnRecieve方法中,執行回調方法:
public override void OnReceive(Context context, Intent intent)
{
IList<ScanResult> scanWifiNetworks = wifi.ScanResults;
foreach(ScanResult wifinetwork in scanWifiNetworks)
{
WiFiNetworks.Add(wifinetwork.Ssid);
}
CallBackAction(WiFiNetworks);
}
現在,回調方法最重要的部分以及作為參數傳遞的內容:
System.Action基本上是一種方法引用,您可以在其中傳遞回調方法的名稱,如下所示:
var service = DependencyService.Get<IWifiService>();
service.GetWifiList(MyCallBackAction);
其中MyCallBackAction如下:
public void MyCallBackAction(List<string> wifiNetworks)
{
// this method will be called every time you get a callback at OnRecieve
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.