コード例 #1
0
ファイル: Actor.cs プロジェクト: se19880529/arpg
 public void SetView(ObjectViewBase v)
 {
     if (this._view != null)
     {
         this._view.OnDetach();
     }
     this._view = v;
     if (this._view != null)
     {
         this._view.OnAttach();
     }
 }
コード例 #2
0
        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);
                }
            }
        }