将TextBox绑定到字符串的一部分

时间:2013-01-17 18:35:57

标签: c# binding textbox

我有一个保存到数据库的字符串,该数据库由两个文本框编译并由.分隔,例如如果一个TextBox2而另一个52.5会被保存到数据库。

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

3 个答案:

答案 0 :(得分: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));
  }
}

答案 1 :(得分:0)

Assumin你的字符串名为“str”,并且始终包含“。”。卡拉科特:

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

或者:

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

答案 2 :(得分: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可用于获取和设置完整数字,因此在从DB读取数字或将数字保存到数据库时将使用。 IntegerPartDecimalPart属性将绑定到两个文本框。如果您不想使用数据绑定,则可以删除这两个属性,并将IntegerPart替换为textBox1.Text,将DecimalPart替换为textBox2.Text {{1}的代码中的任何位置属性。

无论数字是空还是FullNumber以及它是否包含小数点,都可以使用。