我有一个字符串保存到数据库,该数据库由两个文本框编译并由.
例如,如果一个TextBox
有2
,另一个有5
,则2.5
保存到数据库中。
我现在遇到的问题是加载保存的答案。无论如何绑定TextBox.Text
到字符串的某个字符(即第一个文本框将始终是SavedAnswer[0]
,另一个将是SavedAnswer[2]
)还是我必须创建一个转换器,传递完整的答案然后解析它?
有几种方法可以解决。最简单的方法是让您的模型具有两个相关的属性,您可以分别绑定它们。重要的部分是确保他们的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));
}
}
使用这三个属性。
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.Text
和DecimalPart
by 。textBox2.Text
FullNumber
无论数字为空还是null
包含小数点,这都有效。
假设您的字符串名为“str”并且始终包含“。” 性格:
TextBox1.Text = str.Split('.')[0];
TextBox2.Text = str.Split('.')[1];
或者:
string[] SavedAnswer = str.Split('.');
TextBox1.Text = SavedAnswer [0];
TextBox2.Text = SavedAnswer [1];