【问题标题】:default text in textbox wpf文本框wpf中的默认文本
【发布时间】:2011-04-08 18:12:50
【问题描述】:

我有一个TextBox,它的Text 属性绑定到一个名为Gradedouble 类型的属性。我也有一个 @987654325 @,当检查了 @987654326 @时,我希望 @987654327 @ @987654327 @拿一个自动计算值(即自动设置为maxScore/cormect of问题计数)。如果未选中CheckBox,那么我想手动设置和更改Grade。我的问题是我该如何实施?

<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" />

我把它绑定到:

 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;
                    }
                }
            }
        }

谢谢

【问题讨论】:

    标签: wpf data-binding textbox checkbox default


    【解决方案1】:

    在您的 VM 中,拥有另一个公共属性 Auto,并确保您的 Checkbox 绑定到它,您的 TextBox 也是如此(使其变为只读/禁用/隐藏)。我的默认 AutoCheck 将是 true

    【讨论】:

      【解决方案2】:
          <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>
      

      对于视图模型

      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;
          }
      

      【讨论】:

      • 但如果设置为自动,我仍然必须能够更改此值。所以在我的例子中,我有 4 个问题,最高得分为 20。我填写这个,系统在文本框自动给出默认值,所以每个问题 5 分。但是,如果我决定将 1 个问题改为 8 分。所以我在 8 中更改了带有“auto”的文本框,所以其他问题各占 3 分。我有一个列表视图,如果我选择一个,我可以更改详细信息(这里是等级)。
      • 是的,这完全不同,我会重申您的问题,因为它与此评论完全不同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 2010-09-27
      相关资源
      最近更新 更多