private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { UiHexControl self = (UiHexControl)d; byte[] value = e.NewValue as byte[]; lock (self._lock) { if (self._isInternalCall) { return; } FixedByteProvider byteProvider = null; if (value == null) { self._hexBox.Height = 0; } else { byteProvider = new FixedByteProvider((byte[])e.NewValue); self._hexBox.Height = 70; } self._hexBox.ByteProvider = byteProvider; if (byteProvider != null) { byteProvider.Changed += (s, a) => OnValueEdited(self, byteProvider); } } }
private static void OnValueEdited(UiHexControl self, FixedByteProvider byteProvider) { Monitor.Enter(self._lock); try { self._isInternalCall = true; self.Value = byteProvider.Bytes.ToArray(); self._isInternalCall = false; } finally { Monitor.Exit(self._lock); } }