/// <summary> /// Add bindable property value /// </summary> /// <param name="inlines">Inlines to fill</param> /// <param name="tipProperty">Property</param> /// <param name="source">Source object</param> private static void _AddBindableProperty(InlineCollection inlines, TipProperty tipProperty, object source) { try { PropertyPath propertyPath = new PropertyPath(tipProperty.PrefixPath + tipProperty.Name); Binding binding = new Binding(); binding.Path = propertyPath; binding.Source = source; FrameworkElement fe = new FrameworkElement(); BindingOperations.SetBinding(fe, FrameworkElement.DataContextProperty, binding); object value = fe.DataContext; if (value != null) { string valueStr; if (value is double && tipProperty.ValueUnits.HasValue && tipProperty.DisplayUnits.HasValue) { Unit valueUnits = tipProperty.ValueUnits.Value; Unit displayUnits = tipProperty.DisplayUnits.Value; if (valueUnits != displayUnits) { value = UnitConvertor.Convert((double)value, valueUnits, displayUnits); } valueStr = UnitFormatter.Format((double)value, displayUnits); } else { // Special case for planned date if (tipProperty.Name.Equals(Order.PropertyNamePlannedDate)) { DateTime dateTime = (DateTime)value; valueStr = dateTime.ToShortDateString(); } else if (tipProperty.Name.Equals(Stop.PropertyNameStopType)) { valueStr = _GetStopTypeStr((StopType)value, (Stop)source); } else { valueStr = value.ToString(); } } if (valueStr.Length > 0) { _AddLine(tipProperty.Title, valueStr, inlines, false); } } BindingOperations.ClearBinding(fe, FrameworkElement.DataContextProperty); } catch (Exception ex) { Logger.Info(ex); } }
/// <summary> /// Add property tip to list /// </summary> private void _AddPropertyTip(string prePath, string name, string title, IList<object> mapProperties, IList<object> selectedMapProperties, StringCollection selectedConfig, Unit? valueUnits, Unit? displayUnits) { if (name.Equals(Order.PropertyNameName, StringComparison.OrdinalIgnoreCase) || name.Equals(ARRIVETIME_PROP_NAME, StringComparison.OrdinalIgnoreCase) || name.Equals(Order.PropertyNameTimeWindow, StringComparison.OrdinalIgnoreCase) || name.Equals(Order.PropertyNameTimeWindow2, StringComparison.OrdinalIgnoreCase)) { if (!_notSelectableProperties.Keys.Contains(name)) _notSelectableProperties.Add(name, title); return; } foreach (TipProperty property in mapProperties) { if (title.Equals(property.ToString(), StringComparison.OrdinalIgnoreCase)) return; } if (title.Length != 0) { TipProperty tipProperty = new TipProperty(name, title, valueUnits, displayUnits); tipProperty.PrefixPath = prePath; mapProperties.Add(tipProperty); if (selectedConfig.Contains(name)) { selectedMapProperties.Add(tipProperty); } } }
/// <summary> /// Add bindable property value /// </summary> /// <param name="inlines">Inlines to fill</param> /// <param name="tipProperty">Property</param> /// <param name="source">Source object</param> private static void _AddBindableProperty(InlineCollection inlines, TipProperty tipProperty, object source) { try { PropertyPath propertyPath = new PropertyPath(tipProperty.PrefixPath + tipProperty.Name); Binding binding = new Binding(); binding.Path = propertyPath; binding.Source = source; FrameworkElement fe = new FrameworkElement(); BindingOperations.SetBinding(fe, FrameworkElement.DataContextProperty, binding); object value = fe.DataContext; if (value != null) { string valueStr; if (value is double && tipProperty.ValueUnits.HasValue && tipProperty.DisplayUnits.HasValue) { Unit valueUnits = tipProperty.ValueUnits.Value; Unit displayUnits = tipProperty.DisplayUnits.Value; if (valueUnits != displayUnits) value = UnitConvertor.Convert((double)value, valueUnits, displayUnits); valueStr = UnitFormatter.Format((double)value, displayUnits); } else { // Special case for planned date if (tipProperty.Name.Equals(Order.PropertyNamePlannedDate)) { DateTime dateTime = (DateTime) value; valueStr = dateTime.ToShortDateString(); } else if (tipProperty.Name.Equals(Stop.PropertyNameStopType)) { valueStr = _GetStopTypeStr((StopType)value, (Stop)source); } else { valueStr = value.ToString(); } } if (valueStr.Length > 0) { _AddLine(tipProperty.Title, valueStr, inlines, false); } } BindingOperations.ClearBinding(fe, FrameworkElement.DataContextProperty); } catch (Exception ex) { Logger.Info(ex); } }