private void AddNewRefLink()
        {
            var refLinkType = SelectRefType();

            if (!string.IsNullOrEmpty(refLinkType))
            {
                var data = new RefLink();
                data.RefLinkID   = -1;
                data.RefLinkType = refLinkType;
                data.IntraCatID  = IntraCategoryID;
                data.UseInReport = true;

                RegisterPendingChange(new InsertRefLinkCommand(data, Category.ToString()));

                var viewModel = new RefLinkViewModel(data);
                viewModel.RefCode = NextNewName("<New {0}>", _model, () => viewModel.RefCode);
                _model.Add(viewModel);

                viewModel.DataChanged += new DataChangedHandler((changed) => {
                    RegisterUniquePendingChange(new UpdateRefLinkCommand(viewModel.Model, Category.ToString()));
                });

                lstReferences.SelectedItem = viewModel;
                lstReferences.ScrollIntoView(viewModel);
            }
        }
        public ReferencesControl(User user, TraitCategoryType category, int?intraCategoryID) : base(user, String.Format("References::{0}::{1}", category, intraCategoryID))
        {
            InitializeComponent();

            this.Category        = category;
            this.IntraCategoryID = intraCategoryID.Value;

            txtRefType.Click += new RoutedEventHandler((source, e) => {
                var reftype = SelectRefType();
                if (!string.IsNullOrEmpty(reftype))
                {
                    txtRefType.Text = reftype;
                }
            });

            txtReference.BindUser(user, LookupType.Reference);
            txtReference.ObjectSelected += new ObjectSelectedHandler(txtReference_ObjectSelected);

            var list = Service.GetReferenceLinks(category.ToString(), IntraCategoryID);

            _model = new ObservableCollection <RefLinkViewModel>(list.ConvertAll((rl) => {
                var vm          = new RefLinkViewModel(rl);
                vm.DataChanged += new DataChangedHandler((changed) => {
                    RegisterUniquePendingChange(new UpdateRefLinkCommand(vm.Model, Category.ToString()));
                });
                return(vm);
            }));

            gridRefLink.IsEnabled = false;

            lstReferences.ItemsSource       = _model;
            lstReferences.SelectionChanged += new SelectionChangedEventHandler((source, e) => {
                if (!gridRefLink.IsEnabled)
                {
                    gridRefLink.IsEnabled = true;
                }
                gridRefLink.DataContext = lstReferences.SelectedItem;
            });
        }