我有一个保存到数据库的字符串,该数据库由两个文本框编译并由.
分隔,例如如果一个TextBox
有2
而另一个5
,2.5
会被保存到数据库。
我现在遇到的问题是加载已保存的答案。无论如何将TextBox.Text
绑定到字符串的某个字符(即第一个文本框始终为SavedAnswer[0]
而另一个将为SavedAnswer[2]
)或者我是否必须创建转换器,传递完整的答案,然后解析它?
答案 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读取数字或将数字保存到数据库时将使用。 IntegerPart
和DecimalPart
属性将绑定到两个文本框。如果您不想使用数据绑定,则可以删除这两个属性,并将IntegerPart
替换为textBox1.Text
,将DecimalPart
替换为textBox2.Text
{{1}的代码中的任何位置属性。
无论数字是空还是FullNumber
以及它是否包含小数点,都可以使用。