public static TelemetryData Initialize(int udpPort, Dispatcher dispatcher)
 {
     if (_instance != null) throw new TelemetryAlreadyInitializedException();
     _instance = new TelemetryData(udpPort, dispatcher);
     Task.Run(() => _instance.Receiver());
     return _instance;
 }
 public RobotViewModel(TelemetryData telemetryData)
 {
     SideViewLeft = 200;
     SideViewBottom = 900;
     ShoulderAngle = 90;
     ElbowAngle = 0;
     WristAngle = 90;
     SideViewScale = 0.5;
     LeftGetterViewModel = new GetterViewModel();
     RightGetterViewModel = new GetterViewModel();
     _telemetryData = telemetryData;
     _propertyObserver = new PropertyObserver<TelemetryData>(_telemetryData)
         .RegisterHandler(t => t.ShoulderAngle,
                          () => ShoulderAngle = _telemetryData.ShoulderAngle)
         .RegisterHandler(t => t.ElbowAngle,
                          () => ElbowAngle = _telemetryData.ElbowAngle)
         .RegisterHandler(t => t.WristAngle,
                          () => WristAngle = _telemetryData.WristAngle);
 }