| | |
| | | using HMI.Core.Util; |
| | | using Panuon.WPF.UI; |
| | | using System.Collections.Generic; |
| | | using System.Windows; |
| | | using System.Windows.Controls; |
| | | |
| | |
| | | DependencyProperty.RegisterAttached("ValidateMethod", typeof(ValidateMethodDelegate), typeof(FormGroupHelper), |
| | | new PropertyMetadata(null)); |
| | | |
| | | public static bool ValidateForm(StackPanel fgPanel) |
| | | public static bool ValidateForm(StackPanel fgPanel, Dictionary<string, object> values = null) |
| | | { |
| | | if (fgPanel.Children == null) return true; |
| | | bool res = true; |
| | |
| | | { |
| | | if (child is FormGroup fg) |
| | | { |
| | | string fgName = fg.Name; |
| | | if (fg.Visibility != Visibility.Visible) |
| | | { |
| | | ClearValue(fg); |
| | | continue; |
| | | } |
| | | fg.ValidateResult = ValidateResult.None; |
| | | fg.Message = null; |
| | | object content = fg.Content; |
| | | object value = GetValidateValue(content); |
| | | object value; |
| | | if (values != null && values.ContainsKey(fgName)) |
| | | { |
| | | value = values[fgName]; |
| | | } |
| | | else |
| | | { |
| | | object content = fg.Content; |
| | | value = GetValidateValue(content); |
| | | } |
| | | |
| | | if (GetIsRequired(fg) && (value == null || string.IsNullOrEmpty(value.ToString()))) |
| | | { |
| | | fg.ValidateResult = ValidateResult.Error; |
| | |
| | | if (content is PasswordBox passwordInput) return passwordInput.Password; |
| | | return null; |
| | | } |
| | | |
| | | private static void ClearValue(object content) |
| | | { |
| | | if (content == null) return; |
| | | if (content is UIElementCollection elementCollection && elementCollection.Count > 0) |
| | | ClearValue(elementCollection[0]); |
| | | if (content is TextBox tb) tb.Text = null; |
| | | if (content is CheckBox cb) cb.IsChecked = null; |
| | | if (content is ComboBox cBox) |
| | | { |
| | | cBox.SelectedItem = null; |
| | | cBox.SelectedValue = null; |
| | | cBox.Text = null; |
| | | } |
| | | |
| | | if (content is Panel panel) ClearValue(panel.Children); |
| | | if (content is Panuon.WPF.UI.NumberInput numberInput) numberInput.Value = null; |
| | | if (content is PasswordBox passwordInput) passwordInput.Password = null; |
| | | } |
| | | } |
| | | } |