我有这个viewModel:
var data = {num:1,product:1,status:1,rate:1,proceed_detail:2,schedule_detail:3,issues:2,start_date:4,end_date:3}
var myElements = ['num','product','status','rate','proceed_detail','schedule_detail','issues','start_date','end_date'];
for (var i=0; i<= myElements.length -1; i++){
document.getElementById(myElements[i]).value = data[myElements[i]];
}
当应用程序启动时,points1的值在此处设置为0:
public class PhrasesFrameViewModel : ObservableProperty
{
int points1;
public int Points1
{
get { return points1; }
set
{
if (value != points1)
{
points1 = value;
NotifyPropertyChanged("Points1");
}
}
}
当我在屏幕上看时,我什么也看不见,然后调试我看到了它,因为setter正在检查value(0)是否不等于points1(0)的默认值;
那么如何在开始时值为0时在屏幕上显示为0?
答案 0 :(得分:3)
从技术上讲,您的代码仍然有用;在加载期间,检索到的值仅为0。但是,如果您仍希望能够通知设定值;你可以使用nullable int作为类型。
int? points1 = null;
public int? Points1
{
get { return points1; }
set
{
if (value != points1)
{
points1 = value;
NotifyPropertyChanged("Points1");
}
}
}
编辑1
如果目标控件上的属性类型是字符串(例如Entry
。Text
);那么你需要将值转换为字符串。您可以通过创建converter或包装器属性来执行此操作。
int points1;
public int Points1
{
get { return points1; }
set
{
if (value != points1)
{
points1 = value;
NotifyPropertyChanged("Points1");
NotifyPropertyChanged("Points1Str");
}
}
}
// bind this property to control
public string Points1Str
{
get { return points1.ToString(); }
set {
int parsedValue = 0;
if (int.TryParse(value, out parsedValue))
points1 = parsedValue;
}
}