1

我有一个字符串保存到数据库,该数据库由两个文本框编译并由. 例如,如果一个TextBox2,另一个有5,则2.5保存到数据库中。

我现在遇到的问题是加载保存的答案。无论如何绑定TextBox.Text到字符串的某个字符(即第一个文本框将始终是SavedAnswer[0],另一个将是SavedAnswer[2])还是我必须创建一个转换器,传递完整的答案然后解析它?

4

3 回答 3

3

有几种方法可以解决。最简单的方法是让您的模型具有两个相关的属性,您可以分别绑定它们。重要的部分是确保他们的PropertyChanged事件被触发,以便Binding在 UI 上正常工作以反映更改。

例子:

public class MyModel : INotifyPropertyChanged
{
  string fullAnswer;

  public event PropertyChangedEventHandler PropertyChanged;

  public string FullAnswer
  {
    get { return fullAnswer; }
    set
    {
      if(string.Equals(value, fullAnswer)) return; // skip for equal values

      fullAnswer = value;
      OnPropertyChanged("FullAnswer");
      OnPropertyChanged("Answer1");
      OnPropertyChanged("Answer2");
    }
  }

  public string Answer1
  {
    get
    {
      if(fullAnswer == null) return null;

      var tokens = fullAnswer.Split('.');
      if(tokens.Length < 1) return string.Empty;

      return tokens[0];
    }
  }

  public string Answer2
  {
    get
    {
      if(fullAnswer == null) return null;

      var tokens = fullAnswer.Split('.');
      if(tokens.Length < 2) return string.Empty;

      return tokens[1];
    }
  }

  protected void OnPropertyChanged(string propertyName)
  {
    var handler = this.PropertyChanged;

    if(handler != null)
      handler(this, new PropertyChangedEventArgs(propertyName));
  }
}
于 2013-01-17T18:50:35.627 回答
0

使用这三个属性。

public string FullNumber
{
    get
    {
        if (String.IsNullOrEmpty(DecimalPart)) {
            return IntegerPart;
        } else if (String.IsNullOrEmpty(IntegerPart)) {
            return "0." + DecimalPart;
        }
        return IntegerPart + "." + DecimalPart;
    }
    set
    {
        if (String.IsNullOrEmpty(value)) {
            IntegerPart = "";
            DecimalPart = "";
        } else if (value.Contains(".")) {
            string[] parts = value.Split('.');
            IntegerPart = parts[0];
            DecimalPart = parts[1];
        } else {
            IntegerPart = value;
            DecimalPart = "";
        }
    }
}

public string IntegerPart { get; set; }
public string DecimalPart { get; set; }

FullNumber可用于获取和设置完整号码,因此将在从数据库读取号码或将号码保存到数据库时使用。IntegerPart和属性将DecimalPart绑定到两个文本框。如果您不想使用数据绑定,则可以删除这两个属性,并在属性代码中的任何位置替换IntegerPart为 bytextBox1.TextDecimalPartby 。textBox2.TextFullNumber

无论数字为空还是null包含小数点,这都有效。

于 2013-01-17T19:11:14.797 回答
0

假设您的字符串名为“str”并且始终包含“。” 性格:

TextBox1.Text = str.Split('.')[0];
TextBox2.Text = str.Split('.')[1];

或者:

string[] SavedAnswer = str.Split('.');
TextBox1.Text = SavedAnswer [0];
TextBox2.Text = SavedAnswer [1];
于 2013-01-17T18:39:33.307 回答