public void SetView(ObjectViewBase v) { if (this._view != null) { this._view.OnDetach(); } this._view = v; if (this._view != null) { this._view.OnAttach(); } }
private void FillGroup(LayoutGroup group, ICustomModelHandler vm) { var inPropertyEditMode = false; var isOldLayout = false; if (vm.Source != null) { group.DataContext = vm.Source; } var pe = vm as IPropertyEditHandler; if (pe != null) { inPropertyEditMode = pe.InPropertyEditMode; } foreach (var field in vm.Fields.OrderBy(p => p.Order).ToArray()) { bool?isMergedProperty = null; if (inPropertyEditMode) { isMergedProperty = pe.IsMergedPropery(field.Name); } var oldLayout = FindName(field.Name); if ((isOldLayout = oldLayout != null) && !field.IsChangeLookupCode) { var li = oldLayout as CustomDataLayoutItem; if (li != null) { li.SetLabelProperties(field); li.Visibility = field.Visible ? Visibility.Visible : Visibility.Hidden; if (field.IsEnabled.HasValue) { li.IsReadOnly = !field.IsEnabled.Value; } if (field.SetFocus) { li.SetFocus = field.SetFocus; } li.Binding = new Binding(string.IsNullOrEmpty(field.FieldName) ? field.Name : field.FieldName) { Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged, ValidatesOnDataErrors = true, }; } else { var layItem = oldLayout as LayoutItem; if (layItem != null) { layItem.Visibility = field.Visible ? Visibility.Visible : Visibility.Hidden; if (field.IsEnabled.HasValue) { layItem.IsEnabled = field.IsEnabled.Value; layItem.Content.IsEnabled = field.IsEnabled.Value; } } } continue; } var isChangeName = false; if (Regex.IsMatch(field.Name, @"^[0-9]")) { field.Name = "_" + field.Name; isChangeName = true; } LayoutItem layoutItem; LayoutGroup foundGroup = null; var index = 0; if (oldLayout != null) { foundGroup = ObjectViewBase.SearchGroup(group, (UIElement)oldLayout); if (foundGroup == null) { continue; } index = foundGroup.Children.IndexOf((UIElement)oldLayout); if (index < 0) { continue; } foundGroup.Children.Remove((UIElement)oldLayout); UnregisterName(((FrameworkElement)oldLayout).Name); } if (typeof(Button).IsAssignableFrom(field.FieldType)) { Key currKey; layoutItem = new LayoutItem() { Name = field.Name, IsEnabled = !field.IsEnabled.HasValue || field.IsEnabled.Value, Visibility = field.Visible ? Visibility.Visible : Visibility.Collapsed, Content = new CustomButton { Content = field.Caption, Command = vm.MenuCommand, HotKey = Enum.TryParse(field.HotKey, out currKey) ? currKey : Key.None, CommandParameter = new KeyValuePair <string, object>(field.Name, field.Value), Visibility = field.Visible ? Visibility.Visible : Visibility.Collapsed, IsEnabled = !field.IsEnabled.HasValue || field.IsEnabled.Value } }; } else { layoutItem = new CustomDataLayoutItem(field) { IsVisibilitySetOutside = true, IsDisplayFormatSetOutside = true, IsLabelFontWeightBold = field.IsLabelFontWeightBold, ParentViewModelSource = (vm is ICPV) ? vm.ParentViewModelSource : null, LookupButtonEnabled = field.LookupButtonEnabled, ToolTipIns = CreateCustomSuperToolTip(field), IsMergedProperty = isMergedProperty }; } //т.к. испоьзуем ExpandoObject - регистрируем здесь RegisterName(field.Name, layoutItem); if (isChangeName) { field.Name = field.Name.Substring(1); } if (oldLayout != null && index > -1) { foundGroup.Children.Insert(index, layoutItem); } else { group.Children.Add(layoutItem); } } if (!isOldLayout) { objectDataLayout.RestoreLayout(vm.LayoutValue); } if (vm.InsertFromAvailableItems && objectDataLayout.AvailableItems.Count > 0) { foreach (var p in objectDataLayout.AvailableItems.ToArray()) { objectDataLayout.AvailableItems.Remove(p); objectDataLayout.Children.Add(p); } } }