none
Borrar reglas en los ComboBox por Código RRS feed

  • Pregunta

  • Hola a todos.

    Estoy intentado borrar unas reglas que he creado .xaml bajo codigo. pero no me borra, por que puede ser:
    Lo que quiereo que realice es lo siguiente.

    Tengo un Combobox que el usuario tienen que seleccionar uno porque es obligatorio, pero si el valor que esta buscado no esta lo puede añadir desde el mismo control, cuando pierde el foco le pregunta si quiere añadirlo y si lo anade tendria que borrar la Regla ó Rule, pero no lo hace?.

    Codigo .xaml

     

     

     

    <ComboBox Name="txtPat" Grid.Column="1" Grid.Row="1" IsEditable="True" Width="220" StaysOpenOnEdit="True" GotFocus="txtPat_GotFocus" SelectionChanged="txtPat_SelectionChanged" DisplayMemberPath="DESCRIPCION" SelectedValuePath="CODIGO" Validation.ErrorTemplate="{StaticResource validationTemplate}" PreviewLostKeyboardFocus="txtPat_PreviewLostKeyboardFocus">
    <ComboBox.SelectedValue>

     

     

     

    <Binding Path="PATOLOGIA" Mode="TwoWay" NotifyOnValidationError="True" ValidatesOnDataErrors="True" ValidatesOnExceptions="True" UpdateSourceTrigger="PropertyChanged" >
    <Binding.ValidationRules>
    <rule:MandatoryRuleCombo ValidatesOnTargetUpdated="True" ></rule:MandatoryRuleCombo>
    </Binding.ValidationRules>
    </Binding>
    </ComboBox.SelectedValue>
    </ComboBox>

     Codigo .xaml.cs

    Binding

     

     

    ReglaPat = txtPat.GetBindingExpression(ComboBox.SelectedValueProperty).ParentBinding;
    ReglaPat.ValidationRules.Clear();
    PAT Pat = new PAT();
    Pat.DESCRIPCION = aux.ToUpper();
    Pat.CODIGO = (
    from z in ansDB.PAT select z.CODIGO).Max() + 1;
    ansDB.PAT.InsertOnSubmit(Pat);
    ansDB.SubmitChanges();
    txtPat.ItemsSource =
    null;
    txtPat.ItemsSource = (
    from f in ansDB.PAT orderby f.DESCRIPCION ascending select f);
    txtPat.Items.Refresh();
    txtPat.SelectedIndex = Patologia.CODIGO;

    muchas gracias a todos.

    jueves, 24 de junio de 2010 11:12

Todas las respuestas

  • Hola ascariz.

    El codigo de validacion parece estar bien, he probado algo parecido y se borra correctamente la regla de validacion.

    no obstante, cuando haces el clear de la validacion puedes comprobar el numero de reglas de validacion para asegurarte

    usa este codigo:

          // mostrar numero de reglas de validacion asociadas
          MessageBox.Show(txtPat.GetBindingExpression(ComboBox.SelectedValueProperty).ParentBinding.ValidationRules.Count.ToString());
          Binding ReglaPat = txtPat.GetBindingExpression(ComboBox.SelectedValueProperty).ParentBinding;
          ReglaPat.ValidationRules.Clear();
          // mostrar numero de reglas de validacion asociadas
          MessageBox.Show(txtPat.GetBindingExpression(ComboBox.SelectedValueProperty).ParentBinding.ValidationRules.Count.ToString());
    
          PAT Pat = new PAT();
          Pat.DESCRIPCION = aux.ToUpper();
          Pat.CODIGO = (from z in ansDB.PAT select z.CODIGO).Max() + 1;
          ansDB.PAT.InsertOnSubmit(Pat);
          ansDB.SubmitChanges();
          txtPat.ItemsSource = null;
          txtPat.ItemsSource = (from f in ansDB.PAT orderby f.DESCRIPCION ascending select f);
          txtPat.Items.Refresh();
          txtPat.SelectedIndex = Patologia.CODIGO;

    con esto, el primer mensaje deberia de ser 1 y el segundo 0, demostrando que se borra correctamente.

    ya me contaras.

     

     


    Saludos
    David González
    MCP.
    Visita mi Blog en: http://www.dgzornoza.com/
    martes, 29 de junio de 2010 17:05