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加入,
或者是在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版
留言列表