private void dataBindDetails()
        {
            _currentlyDataBinding = true;


            if (_currentlySelectedConstraint == null)
            {
                //gridPrecondDetails.Visibility = Visibility.Hidden;
                gridPrecondDetails.IsEnabled = false;
                return;
            }
            else
            {
                //gridPrecondDetails.Visibility = Visibility.Visible;
                gridPrecondDetails.IsEnabled = true;
            }



            //Top combobox
            List <string> attributeOptions = new List <string>();

            attributeOptions.Add("Trait");

            //Only add relationship editors if there relationships that can be edited
            if ((_editingMode == 0) && (Utilities.getGlobalCharacterList(_currentStoryData)[0].Relationships.Count > 0))
            {
                attributeOptions.Add("Relationship Target Name");
                attributeOptions.Add("Relationship Strength");
            }
            else if ((_editingMode == 1) && (Utilities.getGlobalEnvironmentList(_currentStoryData)[0].Relationships.Count > 0))
            {
                attributeOptions.Add("Relationship Target Name");
                attributeOptions.Add("Relationship Strength");
            }

            comboBoxTraitRelationship.ClearValue(ComboBox.ItemsSourceProperty);
            comboBoxTraitRelationship.Items.Clear();
            comboBoxTraitRelationship.ItemsSource = attributeOptions;

            if (_currentlySelectedConstraint is TraitConstraint)
            {
                comboBoxTraitRelationship.SelectedIndex = 0;
            }
            else if ((_currentlySelectedConstraint is RelationshipConstraint) &&
                     ((RelationshipConstraint)_currentlySelectedConstraint).TargetNameMode)
            {
                comboBoxTraitRelationship.SelectedIndex = 1;
            }
            else
            {
                comboBoxTraitRelationship.SelectedIndex = 2;
            }



            //Left combobox

            if (comboBoxTraitRelationship.SelectedIndex == 0) //Trait
            {
                if (_editingMode == 0)
                {
                    comboBoxSelectTraitRel.ItemsSource = Utilities.getGlobalCharacterList(_currentStoryData)[0].Traits;
                }
                else if (_editingMode == 1)
                {
                    comboBoxSelectTraitRel.ItemsSource = Utilities.getGlobalEnvironmentList(_currentStoryData)[0].Traits;
                }
                else if (_editingMode == 2)
                {
                    comboBoxSelectTraitRel.ItemsSource = _ppType.Traits;
                }
            }
            else if (comboBoxTraitRelationship.SelectedIndex > 0) //relationship target name or strength
            {
                if (_editingMode == 0)
                {   // Using get GLOBAL list (includes not just static characters, but ones
                    //created within plot fragments. This way the user doesn't need to
                    //have created any static character lists to make plot fragment actions
                    //that edit dynamically generated objects
                    comboBoxSelectTraitRel.ItemsSource = Utilities.getGlobalCharacterList(_currentStoryData)[0].Relationships;
                }
                else if (_editingMode == 1)
                {
                    comboBoxSelectTraitRel.ItemsSource = Utilities.getGlobalEnvironmentList(_currentStoryData)[0].Relationships;
                }
            }

            //comparison operation dropdown list
            List <string> allowedOperations = new List <string>();

            allowedOperations.Add(Constraint.ConstraintComparisonTypeToString(ConstraintComparisonType.Equals));
            allowedOperations.Add(Constraint.ConstraintComparisonTypeToString(ConstraintComparisonType.NotEquals));

            if (_currentlySelectedConstraint.ComparisonValue.Type == TraitDataType.Number)
            {
                allowedOperations.Add(Constraint.ConstraintComparisonTypeToString(ConstraintComparisonType.GreaterThan));
                allowedOperations.Add(Constraint.ConstraintComparisonTypeToString(ConstraintComparisonType.LessThan));
                allowedOperations.Add(Constraint.ConstraintComparisonTypeToString(ConstraintComparisonType.GreaterThanEqualTo));
                allowedOperations.Add(Constraint.ConstraintComparisonTypeToString(ConstraintComparisonType.LessThanEqualTo));
            }

            if (_currentlySelectedConstraint.AllowedToSave)
            {
                allowedOperations.Add(Constraint.ConstraintComparisonTypeToString(ConstraintComparisonType.None));
            }
            comboBoxComparisonOp.ItemsSource = allowedOperations;

            checkBoxAlwaysTrue.IsChecked = (bool)_currentlySelectedConstraint.MustAlwaysBeTrue;

            switch (_currentlySelectedConstraint.ConstraintType)
            {
            case ConstraintComparisonType.Equals:
                comboBoxComparisonOp.SelectedIndex = 0;
                break;

            case ConstraintComparisonType.NotEquals:
                comboBoxComparisonOp.SelectedIndex = 1;
                break;

            case ConstraintComparisonType.GreaterThan:
                comboBoxComparisonOp.SelectedIndex = 2;
                break;

            case ConstraintComparisonType.LessThan:
                comboBoxComparisonOp.SelectedIndex = 3;
                break;

            case ConstraintComparisonType.GreaterThanEqualTo:
                comboBoxComparisonOp.SelectedIndex = 4;
                break;

            case ConstraintComparisonType.LessThanEqualTo:
                comboBoxComparisonOp.SelectedIndex = 5;
                break;

            case ConstraintComparisonType.None:
                if (_currentlySelectedConstraint.ComparisonValue.Type == TraitDataType.Number)
                {
                    comboBoxComparisonOp.SelectedIndex = 6;
                }
                else
                {
                    comboBoxComparisonOp.SelectedIndex = 2;
                }

                break;
            }

            if (_currentlySelectedConstraint.ConstraintType == ConstraintComparisonType.None)
            {
                //check box and values are irrelevant for this comparison
                checkBoxUseVariable.IsEnabled  = false;
                textBoxTextInput.IsEnabled     = false;
                txtBoxNumberInput.IsEnabled    = false;
                comboBoxTrueFalse.IsEnabled    = false;
                comboChoiceVariables.IsEnabled = false;

                checkBoxUseVariable.IsChecked = false;
                checkBoxAlwaysTrue.IsEnabled  = false;
                checkBoxAlwaysTrue.IsChecked  = false;
            }
            else
            {
                checkBoxUseVariable.IsEnabled  = true;
                textBoxTextInput.IsEnabled     = true;
                txtBoxNumberInput.IsEnabled    = true;
                comboBoxTrueFalse.IsEnabled    = true;
                comboChoiceVariables.IsEnabled = true;

                checkBoxAlwaysTrue.IsEnabled = true;


                //checkbox
                checkBoxUseVariable.IsChecked = _currentlySelectedConstraint.ComparisonValue.ValueIsBoundToVariable;

                //value boxes
                if (_currentlySelectedConstraint.ComparisonValue.ValueIsBoundToVariable)
                {
                    textBoxTextInput.Visibility     = Visibility.Hidden;
                    txtBoxNumberInput.Visibility    = Visibility.Hidden;
                    comboBoxTrueFalse.Visibility    = Visibility.Hidden;
                    comboChoiceVariables.Visibility = Visibility.Visible;
                    checkBoxUseVariable.Visibility  = Visibility.Visible;

                    //Data bind variable list
                    comboChoiceVariables.ItemsSource  = _currentEntity.getPreviouslyBoundPrimitiveVariables(_currentlySelectedConstraint.ComparisonValue.Type, false, _currentlySelectedConstraint);
                    comboChoiceVariables.ItemTemplate = this.FindResource("comboBoxDataTemplate") as DataTemplate;
                }
                else
                {
                    TraitDataType type = _currentlySelectedConstraint.ComparisonValue.Type;
                    if (type == TraitDataType.Number)
                    {
                        textBoxTextInput.Visibility     = Visibility.Hidden;
                        txtBoxNumberInput.Visibility    = Visibility.Visible;
                        comboBoxTrueFalse.Visibility    = Visibility.Hidden;
                        comboChoiceVariables.Visibility = Visibility.Hidden;

                        //Only show checkbox if there are actual variables to select
                        List <Trait> varList = _currentEntity.getPreviouslyBoundPrimitiveVariables(type, false, _currentlySelectedConstraint);
                        if (varList.Count > 0)
                        {
                            checkBoxUseVariable.Visibility = Visibility.Visible;
                        }
                        else
                        {
                            checkBoxUseVariable.Visibility = Visibility.Hidden;
                        }

                        //Data bind Number
                        txtBoxNumberInput.Value = (double)_currentlySelectedConstraint.ComparisonValue.LiteralValueOrBoundVarName;
                    }
                    else if (type == TraitDataType.Text)
                    {
                        textBoxTextInput.Visibility     = Visibility.Visible;
                        txtBoxNumberInput.Visibility    = Visibility.Hidden;
                        comboBoxTrueFalse.Visibility    = Visibility.Hidden;
                        comboChoiceVariables.Visibility = Visibility.Hidden;

                        //Only show checkbox if there are actual variables to select
                        List <Trait> varList = _currentEntity.getPreviouslyBoundPrimitiveVariables(type, false, _currentlySelectedConstraint);
                        if (varList.Count > 0)
                        {
                            checkBoxUseVariable.Visibility = Visibility.Visible;
                        }
                        else
                        {
                            checkBoxUseVariable.Visibility = Visibility.Hidden;
                        }

                        //Data bind text
                        textBoxTextInput.Text = (string)_currentlySelectedConstraint.ComparisonValue.LiteralValueOrBoundVarName;
                    }
                    else if (type == TraitDataType.TrueFalse)
                    {
                        textBoxTextInput.Visibility     = Visibility.Hidden;
                        txtBoxNumberInput.Visibility    = Visibility.Hidden;
                        comboBoxTrueFalse.Visibility    = Visibility.Visible;
                        comboChoiceVariables.Visibility = Visibility.Hidden;

                        //Only show checkbox if there are actual variables to select
                        List <Trait> varList = _currentEntity.getPreviouslyBoundPrimitiveVariables(type, false, _currentlySelectedConstraint);
                        if (varList.Count > 0)
                        {
                            checkBoxUseVariable.Visibility = Visibility.Visible;
                        }
                        else
                        {
                            checkBoxUseVariable.Visibility = Visibility.Hidden;
                        }

                        //Data bind true/false
                        comboBoxTrueFalse.SelectedIndex = ((bool)_currentlySelectedConstraint.ComparisonValue.LiteralValueOrBoundVarName) ? 0 : 1;
                    }
                }
            }

            if (_currentlySelectedConstraint.AllowedToSave)
            {
                //bottom text and button
                if (_currentlySelectedConstraint.ContainsSavedVariable)
                {
                    textBlockSavedStatus.Visibility = Visibility.Visible;
                    textBlockSavedStatus.Text       = "Value saved as: " + _currentlySelectedConstraint.SavedVariable.Name;
                    btSaveValButton.Content         = "Edit this Variable ...";
                    btSaveValButton.Visibility      = Visibility.Visible;
                }
                else
                {
                    textBlockSavedStatus.Visibility = Visibility.Hidden;
                    btSaveValButton.Content         = "Save this Value ...";
                    btSaveValButton.Visibility      = Visibility.Visible;
                }
            }
            else
            {
                textBlockSavedStatus.Visibility = Visibility.Hidden;
                btSaveValButton.Visibility      = Visibility.Hidden;
            }



            syncDataBoundComboBoxes();
            _currentlyDataBinding = false;
        }