Xaml ListView中的属性更改不会改变StackLayout可见性

Xaml ListView中的属性更改不会改变StackLayout可见性,xaml,xamarin.forms,Xaml,Xamarin.forms,我有一个绑定到ListView的分组ObservableCollection 我在ListView中有许多StackLayout,它们的可见性在ListView tapp中发生变化 内部的所有其他属性都会对PropertyChange作出反应,但StackLayout的可见性不会 所有这些都是在UI线程上完成的 其他人是否有这个问题 更新循环内的UI Device.BeginInvokeOnMainThread(() => {

我有一个绑定到ListView的分组ObservableCollection

我在ListView中有许多StackLayout,它们的可见性在ListView tapp中发生变化

内部的所有其他属性都会对PropertyChange作出反应,但StackLayout的可见性不会

所有这些都是在UI线程上完成的

其他人是否有这个问题

更新循环内的UI

Device.BeginInvokeOnMainThread(() =>
                        {
                            item.Effort = SelectedTaskItem.Effort;
                            finalEffortDouble = SelectedTaskItem.Effort + finalEffortDouble - previousEffort;
                            item.IsSaved = true;
                            item.IsNotSaved = false;
                            item.EffortsString = SelectedTime.ToString("hh':'mm") + " h";
                            TotalEffortsHoursString = TimeSpan.FromHours(finalEffortDouble + TotalEffortsHours).ToString("hh'.'mm") + " hrs";

                        });
IsSaved、IsNotSaved是绑定到ListView中StackLayout可见性属性的布尔值

任务模型:

  public class TaskModel : ObservableObject
{
    public string TaskGUID { get; set; }
    public string TaskName { get; set; }
    public string EffortStatus { get; set; }
    public string TaskStatus { get; set; }

    private double _Effort;
    public double Effort
    {
        get { return _Effort; }
        set
        {
            _Effort = value;
            RaisePropertyChanged("Effort");
        }
    }

    public DateTime EffortDate { get; set; }
    public DateTime EffortDay { get; set; }

    //UI Models : Used for UI Changes 
    public string ProjectID { get; set; }
    public DateTime LastWorkingDay { get; set; }

    private bool _IsSaved;
    public bool IsSaved
    {
        get
        {
            if (this.EffortStatus.Contains("10"))
                _IsSaved = true;
            else
                _IsSaved = false;
            return _IsSaved;
        }
        set
        {
            _IsSaved = value;
            RaisePropertyChanged("IsSaved");
        }


    }

    public bool IsSubmitted
    {
        get
        {
            if (this.EffortStatus.Contains("20"))
            {
                return true;
                //&& LastWorkingDay.Date >= DateTime.Now.Date
            }
            else
                return false;
        }
    }

    public bool IsApproved
    {
        get
        {
            if (this.EffortStatus.Contains("30"))
            {
                return true;
            }
            else
                return false;
        }
    }

    public bool IsRejected
    {
        get
        {
            if (this.EffortStatus.Contains("40"))
            {
                return true;
            }
            else
                return false;
        }
    }

    public string _EffortsString;
    public string EffortsString
    {
        get
        {
            _EffortsString = TimeSpan.FromHours(Effort).ToString("hh':'mm") + " h";
            return _EffortsString;
        }
        set
        {
            _EffortsString = value;
            RaisePropertyChanged("EffortsString");
        }
    }

    private bool _IsNotSaved;
    public bool IsNotSaved
    {
        get
        {
            if (this.EffortStatus.Contains("0 "))
                _IsNotSaved = true;
            else
                _IsNotSaved = false;

            return _IsNotSaved;
        }
        set
        {
            _IsNotSaved = value;
            RaisePropertyChanged("IsNotSaved");
        }
    }
}

我认为问题在于IsSaved取决于EffortStatus,因此您不应该为IsSaved设置一个集合。我想你应该提高当我设置EffortStatus时,属性已保存且未保存。比如:

   public string EffortStatus
    {
        get
        {
            return _EffortStatus;
        }
        set
        {
            _EffortStatus= value;
            if (_EffortStatus.Contains("10"))
                IsSaved = true;
            else
                IsSaved = false;
            RaisePropertyChanged("EffortStatus");
            RaisePropertyChanged("IsSaved");
        }


    }

你应该把你的信寄出去code@AlessandroCaliaro嘿,我已经发帖了!你能发布TaskModel吗?@AlessandRocaliardonehey!这有帮助。谢谢
  public class TaskModel : ObservableObject
{
    public string TaskGUID { get; set; }
    public string TaskName { get; set; }
    public string EffortStatus { get; set; }
    public string TaskStatus { get; set; }

    private double _Effort;
    public double Effort
    {
        get { return _Effort; }
        set
        {
            _Effort = value;
            RaisePropertyChanged("Effort");
        }
    }

    public DateTime EffortDate { get; set; }
    public DateTime EffortDay { get; set; }

    //UI Models : Used for UI Changes 
    public string ProjectID { get; set; }
    public DateTime LastWorkingDay { get; set; }

    private bool _IsSaved;
    public bool IsSaved
    {
        get
        {
            if (this.EffortStatus.Contains("10"))
                _IsSaved = true;
            else
                _IsSaved = false;
            return _IsSaved;
        }
        set
        {
            _IsSaved = value;
            RaisePropertyChanged("IsSaved");
        }


    }

    public bool IsSubmitted
    {
        get
        {
            if (this.EffortStatus.Contains("20"))
            {
                return true;
                //&& LastWorkingDay.Date >= DateTime.Now.Date
            }
            else
                return false;
        }
    }

    public bool IsApproved
    {
        get
        {
            if (this.EffortStatus.Contains("30"))
            {
                return true;
            }
            else
                return false;
        }
    }

    public bool IsRejected
    {
        get
        {
            if (this.EffortStatus.Contains("40"))
            {
                return true;
            }
            else
                return false;
        }
    }

    public string _EffortsString;
    public string EffortsString
    {
        get
        {
            _EffortsString = TimeSpan.FromHours(Effort).ToString("hh':'mm") + " h";
            return _EffortsString;
        }
        set
        {
            _EffortsString = value;
            RaisePropertyChanged("EffortsString");
        }
    }

    private bool _IsNotSaved;
    public bool IsNotSaved
    {
        get
        {
            if (this.EffortStatus.Contains("0 "))
                _IsNotSaved = true;
            else
                _IsNotSaved = false;

            return _IsNotSaved;
        }
        set
        {
            _IsNotSaved = value;
            RaisePropertyChanged("IsNotSaved");
        }
    }
}
   public string EffortStatus
    {
        get
        {
            return _EffortStatus;
        }
        set
        {
            _EffortStatus= value;
            if (_EffortStatus.Contains("10"))
                IsSaved = true;
            else
                IsSaved = false;
            RaisePropertyChanged("EffortStatus");
            RaisePropertyChanged("IsSaved");
        }


    }