2011-04-08 2 views
0

J'ai un TextBox, sa propriété Text est liée à une propriété de type double nommée Grade. J'ai également un CheckBox, lorsque le CheckBox est coché Je veux que le Grade prenne une valeur calculée automatiquement (c'est-à-dire automatiquement définie sur MaxScore/Nombre de questions). Si le CheckBox n'est pas coché, je souhaite définir et modifier le Grade manuellement. Ma question est comment puis-je implémenter ceci?le texte par défaut dans la zone de texte wpf

<TextBox Height="23" 
    Visibility="{Binding Path=Visible2, Converter={StaticResource boolToVis}, UpdateSourceTrigger=PropertyChanged}" 
    Text="{Binding Path=Grade,UpdateSourceTrigger =PropertyChanged,Mode=TwoWay}" 
    HorizontalAlignment="Left" Margin="376,453,0,0" 
    Name="textBox3" VerticalAlignment="Top" Width="120" /> 

et je lier cela à:

public double Grade 
     { 
      get 
      { 

       return grade; 
      } 
      set 
      { 
       grade = value; 
       OnPropertyChanged("Grade"); 

       foreach (ExaminationQuestion exaq in 
         this.Examination.ExaminationQuestions) 
       { 
        if (exaq.Question.Guid == SelectedQuestionDropList.Guid) 
        { 
         exaq.Grade = value; 
        } 
       } 
      } 
     } 

Merci

Répondre

0

dans votre machine virtuelle, une autre publique Automobile et assurez-vous que votre Checkbox se lie à ce dernier et donc votre TextBox (donc qu'il devient en lecture seule/désactivé/caché). Et mon défaut AutoCheck sera vrai

0
<StackPanel Orientation="Horizontal" VerticalAlignment="Top"> 
     <Label Content="Grade" /> 
     <TextBox Height="23" Width="120" 
       Text="{Binding Path=GradeDisplay}" 
       IsEnabled="{Binding EnableBox}" 
        /> 
     <Label Content="Auto?" /> 
     <CheckBox IsChecked="{Binding IsAuto}" /> 
    </StackPanel> 

Et pour la vue Modèle

public bool EnableBox { get; set; } 
    public string GradeDisplay 
    { 
     get 
     { 
      if (EnableBox) 
       return Grade.ToString(); 
      else 
       return "AUTO"; 
     } 
     set 
     { 
      double result; 
      if (double.TryParse(value, out result)) 
       Grade = result; 
      NotifyPropertyChanged("GradeDisplay"); 
     } 
    } 


    private bool _IsAuto;   
    public bool IsAuto 
    { 
     get 
     { 
      return _IsAuto; 
     } 

     set 
     { 
      _IsAuto = value; 
      EnableBox = !value; 
      NotifyPropertyChanged("GradeDisplay"); 
      NotifyPropertyChanged("EnableBox"); 
     } 
    } 

    private double _Grade; 
    private double Grade 
    { 
     set 
     { 
      _Grade = value; 
     } 
     get 
     { 
      if (IsAuto) 
      { 
       // CODE TO GET AUTO GRADE 
       return 0.0; 
      } 
      else 
      { // RETURN MANUALLY SET GRADE 
       return _Grade; 
      } 
     } 

    } 

    // CTOR 
    public MainWindowViewModel() 
    { 
     IsAuto = false; 
    } 
+0

Mais si elle est définie sur auto, je dois encore être en mesure de modifier cette valeur. Donc dans mon exemple, j'ai 4 questions, avec un score maximum sur 20. Je remplis cela, le système donne par défaut dans les boîtes de texte Auto, donc chaque question sur 5 points. Mais ensuite, si je décide que je veux changer une question à 8 points. Donc, je change la zone de texte avec "auto" en 8, donc les autres questions viennent chacun sur 3 points. J'ai un listview et si je choisis un je peux changer les détails (ici la catégorie). – Ruben

+0

Ouais, c'est différent tous ensemble, je voudrais reformuler votre question car il ne lit rien comme ce commentaire. –

Questions connexes