当后面的属性值为0时,如何使我的视图显示为0?

时间:2017-09-06 02:57:26

标签: xamarin xamarin.forms

我有这个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?

1 个答案:

答案 0 :(得分:3)

从技术上讲,您的代码仍然有用;在加载期间,检索到的值仅为0。但是,如果您仍希望能够通知设定值;你可以使用nullable int作为类型。

int? points1 = null;

public int? Points1
{
    get { return points1; }
    set
    {
        if (value != points1)
        {
            points1 = value;
            NotifyPropertyChanged("Points1");
        }
    }
}

编辑1

如果目标控件上的属性类型是字符串(例如EntryText);那么你需要将值转换为字符串。您可以通过创建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;
    }
}