我有一个名为HaemogramViewModel的ViewModel
这是代码:
public class HaemogramViewModel : INotifyPropertyChanged
{
public HaemogramViewModel()
{
}
public Haemogram CurrentHaemogramReport
{
get
{
return MainWindowViewModel.cHaemogram;
}
set
{
MainWindowViewModel.cHaemogram = value;
OnPropertyChanged("CurrentHaemogramReport");
}
}
protected virtual void OnPropertyChanged(string PropertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(PropertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
}
在我的MainWindowViewModel Calss中:
class MainWindowViewModel : INotifyPropertyChanged
{
public MainWindowViewModel()
{
cHaemogram = new Haemogram();
}
public static Haemogram cHaemogram { get; set; }
private void SaveChanges(object obj)
{
using (Lab_Lite_Entities db = new Lab_Lite_Entities())
{
//db.Patients.Add(CurrentPatient);
if (cHaemogram != null)
{
if (cHaemogram.Haemoglobin != null)
{
db.Haemograms.Add(cHaemogram);
}
}
}
}
}
我的文本框绑定到CurrentHaemogram属性的血红蛋白字段。
当我在文本框中输入一些值然后单击“保存”按钮时,一切正常。
现在的问题是:
当我在文本框中输入一些值时,我按Tab键然后再次单击文本框,然后清除文本框中的值。现在,如果我点击保存按钮,那么我不会得到文本框的值= null,而是我得到文本框的值=我之前输入的值。
答案 0 :(得分:2)
试试这个有效
<TextBox Text="{Binding B, UpdateSourceTrigger=PropertyChanged, TargetNullValue=''}"/>
并且在您查看的模型属性应声明如下
private double? b;
public double? B
{
get
{
return b;
}
set
{
b = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("B"));
}
}
}
答案 1 :(得分:1)
在xmal中你必须将属性UpdateSourceTrigger = PropertyChanged设置如下
<TextBox Text="{Binding Path=Property, UpdateSourceTrigger=PropertyChanged}"/>
通过defalut UpdateSourceTrigger = LostFocus,这意味着一旦按Tab键或者焦点丢失,绑定到textBox的属性就会更新。如果设置为PropertyChanged,它将更新textBox中每个char更改的属性