private void HookRowChangedEvent() { // subscribe to the RowChangedEvent Table table = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault().GetTable(); RowChangedEvent.Subscribe(OnRowChangedEvent, table); } private Guid _currentRowChangedGuid = Guid.Empty; protected void OnRowChangedEvent(RowChangedEventArgs args) { // RowEvent callbacks are always called on the QueuedTask so there is no need // to wrap your code within a QueuedTask.Run lambda. var row = args.Row; // check for re-entry (only if row.Store is called) if (_currentRowChangedGuid == args.Guid) return; var fldIdx = row.FindField("POLICE_DISTRICT"); if (fldIdx != -1) { //Validate any change to �police district� // cancel the edit if validation on the field fails if (row.HasValueChanged(fldIdx)) { // cancel edit with invalid district (5) var value = row["POLICE_DISTRICT"].ToString(); if (value == "5") { //Cancel edits with invalid �police district� values args.CancelEdit($"Police district {row["POLICE_DISTRICT"]} is invalid"); } } // update the description field row["Description"] = "Row Changed"; // this update with cause another OnRowChanged event to occur // keep track of the row guid to avoid recursion _currentRowChangedGuid = args.Guid; row.Store(); _currentRowChangedGuid = Guid.Empty; } }
private static FeatureLayer featureLayer; private static void DetermineGeometryChange() { featureLayer = MapView.Active?.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault(); if (featureLayer == null) return; QueuedTask.Run(() => { //Listen to the RowChangedEvent that occurs when a Row is changed. ArcGIS.Desktop.Editing.Events.RowChangedEvent.Subscribe(OnRowChangedEvent2, featureLayer.GetTable()); }); } private static void OnRowChangedEvent2(RowChangedEventArgs args) { // RowEvent callbacks are always called on the QueuedTask so there is no need // to wrap your code within a QueuedTask.Run lambda. //Get the layer's definition var lyrDefn = featureLayer.GetFeatureClass().GetDefinition(); //Get the shape field of the feature class string shapeField = lyrDefn.GetShapeField(); //Index of the shape field var shapeIndex = lyrDefn.FindField(shapeField); //Original geometry of the modified row var geomOrig = args.Row.GetOriginalValue(shapeIndex) as Geometry; //New geometry of the modified row var geomNew = args.Row[shapeIndex] as Geometry; //Compare the two bool shapeChanged = geomOrig.IsEqual(geomNew); }
Target Platforms: Windows 11, Windows 10