В моем проекте Xamarin.Forms у меня есть центральная модель данных под названием DataStore
, которая постоянно извлекает данные JSON из веб-сокета, преобразует их в объекты и сохраняет их в Dictionary
. Мне нужно получить доступ к этому DataStore
из нескольких ViewModels и Views. Для этого я сделал следующее:
[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace Foo
{
public partial class App : Application
{
public DataStore dataStore { get; }
public static App current = (App)Application.Current;
public App()
{
InitializeComponent();
dataStore = new DataStore();
MainPage = new MainPage();
}
}
}
А у самого DataStore
есть следующие события:
namespace Foo
{
public class DataStore
{
Dictionary<int, Target> targetDict;
public EventHandler<Target> targetAdded;
public EventHandler<Target> targetRemoved;
}
}
Таким образом, я могу подключиться к событиям DataModel
во всех ViewModels или Views, где они мне нужны, следующим образом:
namespace Foo
{
public class TargetMap : Map
{
public List<CustomPin> customPins { get; set; }
public TargetMap() : base()
{
customPins = new List<CustomPin>();
App.current.dataStore.targetAdded += onTargetAdded;
App.current.dataStore.targetRemoved += onTargetRemoved;
}
void onTrackRemoved(object sender, Target t)
{
// Do stuff
}
void onTrackAdded(object sender, Track t)
{
// Do stuff
}
}
}
Однако я сталкиваюсь с исключениями нулевого указателя, которые говорят мне, что у меня проблема с порядком инициализации.
Вопрос:
Где и как будет «Xamarin» способ инициализации центрального компонента слоя данных, такого как DataStore
, если к нему требуется доступ из нескольких ViewModel и Views? Вы бы просто сделали это статичным?
Любой намек очень ценится!