/// <summary> /// Raises a Property Changed event /// </summary> protected virtual void OnPropertyChanged(string propertyName, object before, object after) { // Register Property Changed if (!ChangedProperties.Contains(propertyName) && propertyName != "" && before != after) { ChangedProperties.Add(propertyName); } PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
public void PropertyChange(string name, object value) { if (ChangedProperties.ContainsKey(name) == true) { ChangedProperties[name] = value; } else { ChangedProperties.Add(name, value); } }
/// <summary> /// Raises a Property Changed event /// </summary> public void OnPropertyChanged(string propertyName, object before, object after) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); if (propertyName == null || ChangeTrackingDisabled) { return; } // Register Property Changed if (!ChangedProperties.Contains(propertyName) && before != after) { ChangedProperties.Add(propertyName); } }
/// <summary> /// Changes property of the object /// </summary> /// <typeparam name="TTarget"></typeparam> /// <param name="propertyExpr"></param> /// <param name="value"></param> public void Set <TTarget>(Expression <Func <TObj, TTarget> > propertyExpr, TTarget value) { if (!(propertyExpr.Body is MemberExpression memberSelectorExpression)) { return; } var property = memberSelectorExpression.Member as PropertyInfo; if (property == null) { return; } var getter = CreateGetter(propertyExpr); var oldValue = getter(_object); var handledValue = value; if (typeof(TTarget) == typeof(DateTime)) { if (((DateTime)(object)oldValue).Difference((DateTime)(object)handledValue) > TimeSpan.FromSeconds(1)) { ActionIfDiff(); } return; } if (typeof(TTarget) == typeof(TimeSpan)) { if (((TimeSpan)(object)oldValue).Subtract((TimeSpan)(object)handledValue).Duration() > TimeSpan.FromSeconds(1)) { ActionIfDiff(); } return; } if (!typeof(TTarget).IsSimple()) { var jsonSerializerSettings = new JsonSerializerSettings(); jsonSerializerSettings.Converters.Add(new DecimalConverter() { Precision = 4 }); var jsonSerializer = JsonSerializer.Create(jsonSerializerSettings); if (typeof(IEnumerable).IsAssignableFrom(typeof(TTarget))) { if (!JToken.DeepEquals(JArray.FromObject(oldValue, jsonSerializer), JArray.FromObject(handledValue, jsonSerializer))) { ActionIfDiff(); } } else { if (!JToken.DeepEquals(JObject.FromObject(oldValue, jsonSerializer), JObject.FromObject(handledValue, jsonSerializer))) { ActionIfDiff(); } } return; } if (!Equals(oldValue, handledValue)) { ActionIfDiff(); } void ActionIfDiff() { var setter = CreateSetter(propertyExpr); setter(_object, handledValue); _actionIfChanged?.Invoke(); IsChanged = true; if (IsLogChangedPropertiesEnabled) { ChangedProperties.Add(new ChangedPropertyItem() { PropertyName = property.Name, PropertyType = property.PropertyType, OldValue = oldValue, NewValue = handledValue }); } } }
public void ChangeCellIndex(int totalDeltaCellIndexX, int totalDeltaCellIndexY) { int newCellIndexX = CellIndexX; int newCellImgX = CellImgX; int newCellIndexY = CellIndexY; int newCellImgY = CellImgY; if (totalDeltaCellIndexX != 0) { int deltaCellIndexX = totalDeltaCellIndexX > 0 ? 1 : -1; newCellIndexX = (CellIndexX + deltaCellIndexX + NumCellX) % NumCellX; if (deltaCellIndexX < 0 && CellIndexX == 0 && CellIndexX < newCellIndexX) { if (newCellImgX + NumCellX >= TotalNumCellX) { CurrMapPage = CurrMapPage.Right; //if (Neighbors[CurrMapPage].ContainsKey("R")) //{ // CurrMapPage = Neighbors[CurrMapPage]["R"]; //} //else if (Neighbors[CurrMapPage].ContainsKey("L")) //{ // CurrMapPage = Neighbors[CurrMapPage]["L"]; //} } newCellImgX = (newCellImgX + NumCellX + TotalNumCellX) % TotalNumCellX; } if (deltaCellIndexX > 0 && CellIndexX + 1 == NumCellX && CellIndexX > newCellIndexX) { if (newCellImgX - NumCellX < 0) { CurrMapPage = CurrMapPage.Left; //if (Neighbors[CurrMapPage].ContainsKey("L")) //{ // CurrMapPage = Neighbors[CurrMapPage]["L"]; //} //else if (Neighbors[CurrMapPage].ContainsKey("R")) //{ // CurrMapPage = Neighbors[CurrMapPage]["R"]; //} } newCellImgX = (newCellImgX - NumCellX + TotalNumCellX) % TotalNumCellX; } } if (totalDeltaCellIndexY != 0) { int deltaCellIndexY = totalDeltaCellIndexY > 0 ? 1 : -1; newCellIndexY = (CellIndexY + deltaCellIndexY + NumCellY) % NumCellY; if (deltaCellIndexY < 0 && CellIndexY == 0 && CellIndexY < newCellIndexY) { if (newCellImgY + NumCellY >= TotalNumCellY) { CurrMapPage = CurrMapPage.Bottom; //if (Neighbors[CurrMapPage].ContainsKey("B")) //{ // CurrMapPage = Neighbors[CurrMapPage]["B"]; //} //else if (Neighbors[CurrMapPage].ContainsKey("T")) //{ // CurrMapPage = Neighbors[CurrMapPage]["T"]; //} } newCellImgY = (newCellImgY + NumCellY + TotalNumCellY) % TotalNumCellY; } if (deltaCellIndexY > 0 && CellIndexY + 1 == NumCellY && CellIndexY > newCellIndexY) { if (newCellImgY - NumCellY < 0) { CurrMapPage = CurrMapPage.Top; //if (Neighbors[CurrMapPage].ContainsKey("T")) //{ // CurrMapPage = Neighbors[CurrMapPage]["T"]; //} //else if (Neighbors[CurrMapPage].ContainsKey("B")) //{ // CurrMapPage = Neighbors[CurrMapPage]["B"]; //} } newCellImgY = (newCellImgY - NumCellY + TotalNumCellY) % TotalNumCellY; } } if (CellIndexX != newCellIndexX) { CellIndexX = newCellIndexX; ChangedProperties.Add("CellX"); } if (CellIndexY != newCellIndexY) { CellIndexY = newCellIndexY; ChangedProperties.Add("CellY"); } if (CellImgX != newCellImgX || CellImgY != newCellImgY) { CellImgX = newCellImgX; CellImgY = newCellImgY; ChangedProperties.Add("CellImgPath"); } NotifyPropertyChanged(); }