public DeviceParameterViewModel(GKDevice device)
		{
			Device = device;
			DeviceViewModel = new DeviceViewModel(device);

			AUParameterValues = new ObservableCollection<MeasureParameterViewModel>();
			foreach (var measureParameter in device.Driver.MeasureParameters.Where(x => !x.IsNotVisible))
			{
				var measureParameterViewModel = new MeasureParameterViewModel();
				measureParameterViewModel.Device = device;
				measureParameterViewModel.Name = measureParameter.Name;
				measureParameterViewModel.DriverParameter = measureParameter;
				AUParameterValues.Add(measureParameterViewModel);
			}

			device.State.MeasureParametersChanged += new Action(OnMeasureParametersChanged);
		}
		void StartMeasureParametersMonitoring()
		{
			MeasureParameters = new ObservableCollection<MeasureParameterViewModel>();
			foreach (var measureParameter in Device.Driver.MeasureParameters)
			{
				var measureParameterViewModel = new MeasureParameterViewModel()
				{
					Name = measureParameter.Name,
					IsDelay = measureParameter.IsDelay
				};
				MeasureParameters.Add(measureParameterViewModel);
			}

			BackgroundWorker = new BackgroundWorker();
			BackgroundWorker.DoWork += new DoWorkEventHandler(UpdateMeasureParameters);
			BackgroundWorker.RunWorkerAsync();
		}
		public void OnNewAUParameterValue(MeasureParameterViewModel value)
		{
			Dispatcher.BeginInvoke(new Action(() =>
			{
				var auParameterValue = AUParameterValues.FirstOrDefault(x => x.Name == value.Name);
				if (auParameterValue == null)
				{
					auParameterValue = value;
					AUParameterValues.Add(auParameterValue);
				}
				auParameterValue.Value = value.Value;
				auParameterValue.StringValue = value.StringValue;
				OnPropertyChanged("AUParameterValues");
			}));
		}
		void OnMeasureParametersChanged()
		{
			MeasureParameters = new ObservableCollection<MeasureParameterViewModel>();
			foreach (var measureParameter in Device.State.XMeasureParameterValues)
			{
				if (Device.Driver.MeasureParameters.Any(x => x.Name == measureParameter.Name && x.IsNotVisible))
					continue;
				var measureParameterViewModel = new MeasureParameterViewModel()
				{
					Name = measureParameter.Name,
					StringValue = measureParameter.StringValue
				};
				MeasureParameters.Add(measureParameterViewModel);
				SelectedMeasureParameter = _measureParameters.FirstOrDefault(x => x.Name == _savedSelectedMeasureParameterName);
			}
		}
		void ParameterUpdateHelper_NewAUParameterValue(MeasureParameterViewModel auParameterValue)
		{
			var deviceParameterViewModel = Devices.FirstOrDefault(x => x.Device.UID == auParameterValue.Device.UID);
			if (deviceParameterViewModel != null)
			{
				deviceParameterViewModel.OnNewAUParameterValue(auParameterValue);

				switch (auParameterValue.DriverParameter.InternalName)
				{
					case "Smokiness":
						deviceParameterViewModel.Smokiness = auParameterValue.StringValue;
						break;

					case "Temperature":
						deviceParameterViewModel.Temperature = auParameterValue.StringValue;
						break;

					case "Dustinness":
						deviceParameterViewModel.Dustinness = auParameterValue.StringValue;
						break;

					case "LastServiceTime":
						deviceParameterViewModel.LastServiceTime = auParameterValue.StringValue;
						break;

					case "Resistance":
						deviceParameterViewModel.Resistance = auParameterValue.StringValue;
						break;
				}
			}
		}