public TraitElementControl(User user, TraitViewModel model, TraitCategoryType categoryType)
        {
            this.Model  = model;
            DataContext = model;
            InitializeComponent();
            txtValue.BindUser(user, PickListType.DistinctTraitList, model.Name, categoryType);
            if (!String.IsNullOrEmpty(model.Comment))
            {
                commentLink.Inlines.Clear();
                commentLink.Inlines.Add(new Run("Edit comment"));
            }

            Model.DataChanged += new DataChangedHandler((vm) => {
                FireTraitChanged();
            });
        }
        private void AddTraitEditor(TraitViewModel model)
        {
            var itemControl = new TraitElementControl(User, model, TraitCategory);

            itemControl.TraitChanged += new TraitElementControl.TraitEventHandler((source, trait) => {
                RegisterUniquePendingChange(new UpdateTraitDatabaseCommand(trait.Model, Owner));
            });

            itemControl.TraitDeleted += new TraitElementControl.TraitEventHandler((source, trait) => {
                _model.Remove(trait);
                ReloadTraitPanel();
                RegisterPendingChange(new DeleteTraitDatabaseCommand(trait.Model, Owner));
            });

            itemControl.IsReadOnly = this.IsReadOnly;

            traitsPanel.Children.Add(itemControl);
        }
 private void SelectTrait(TraitViewModel vm)
 {
     // find the trait editor for the selected trait...
     foreach (TraitElementControl ctl in traitsPanel.Children)
     {
         if (ctl.Model == vm)
         {
             if (!ctl.txtValue.IsLoaded)
             {
                 ctl.txtValue.txt.Loaded += new RoutedEventHandler((source, e) => {
                     Keyboard.Focus(ctl.txtValue.txt);
                 });
             }
             else
             {
                 Keyboard.Focus(ctl.txtValue.txt);
             }
             return;
         }
     }
 }
        private void AddNewTrait()
        {
            var service = new SupportService(User);

            List <String> traitTypes = service.GetTraitNamesForCategory(TraitCategory.ToString());

            var picklist = new PickListWindow(User, "Choose a trait type...", () => {
                return(traitTypes);
            }, (text) => {
                traitTypes.Add(text);
                return(true);
            });

            picklist.Owner = this.FindParentWindow();
            if (picklist.ShowDialog().ValueOrFalse())
            {
                var existing = FindTraitByName(picklist.SelectedValue as string);
                if (existing == null)
                {
                    Trait t = new Trait();
                    t.TraitID    = -1;
                    t.Value      = "<New Trait Value>";
                    t.Category   = TraitCategory.ToString();
                    t.IntraCatID = Owner.ObjectID.Value;
                    t.Name       = picklist.SelectedValue as string;

                    TraitViewModel viewModel = new TraitViewModel(t);
                    _model.Add(viewModel);
                    RegisterUniquePendingChange(new UpdateTraitDatabaseCommand(t, Owner));
                    ReloadTraitPanel();

                    SelectTrait(viewModel);
                }
                else
                {
                    SelectTrait(existing);
                }
            }
        }