Model class 的資料使用 BindingSource綁定到UI上,如果想要在 Property 變更時自動更新到UI上,就必須讓Model class繼承INotifyPropertyChanged,如下面代碼

public class Status : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
 
        public void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
 
        private MachineStatus _MainStatus = MachineStatus.Inital;
 
        public MachineStatus MainStatus
        {
            get { return _MainStatus; }
            set
            {
                _MainStatus = value;
                this.NotifyPropertyChanged();
            }
        }
    }

 

public enum MachineStatus

{

    /// <summary> 初始狀態 </summary>

    Inital,

    /// <summary>  Home  </summary>

    Homing,//home

    /// <summary> 等待指令 </summary>

    Ready,

    /// <summary> 工作中 </summary>

    Work,

    /// <summary> 檢測完成 </summary>

    Finish,

    Alarm,

}

 

Model class property 程式碼就會變得很長,依軟體工程師偷懶的個性實在無法接受這樣的寫法,這時候就可以使用PropertyChanged.Fody這個套件讓程式碼簡化如下

public class Status : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    
    private MachineStatus MainStatus { get; set; } = MachineStatus.Inital;
}

 

可以依照 Fody usage的方式加入,在Model class的專案裡透過Nuget加入,

1.png

或者是在Nuget封裝管理員輸入以下指令安裝

PM> Install-Package Fody
PM> Install-Package PropertyChanged.Fody

 

安裝完成建置成功後,應該會自動加入FodyWeavers.xml的檔案,如果沒有自動加入這個檔案請手動加入,並且修改裡面的內容如下

<Weavers>
  <PropertyChanged/>
</Weavers>

 

如果出現以下錯誤

Fody is only supported on MSBuild 16 and above. Current version: 15.

可以將PropertyChanged.Fody退版到2.6.1

文章標籤

nightbab00 發表在 痞客邦 留言(0) 人氣()