C# DataGridTemplateColumn更新

C# DataGridTemplateColumn更新,c#,wpf,datagrid,inotifypropertychanged,C#,Wpf,Datagrid,Inotifypropertychanged,我正在将一个旧控件修改为WPF。我需要制作一个显示报警列表的数据网格。datagrid的第一列是datagridtemplate列,其中包含一个标志图标和日期。当用户按下按钮时,报警被确认,标志图标必须消失。我使用的是MVVM模式 问题是我似乎无法更新datagridtemplate列中的标志。当我将确认状态从0更改为1时,报警已确认,标志不会消失。当我重新加载控件并再次从服务器获取警报时,该标志不会再次显示,表明其状态实际上已在服务器中更新。因此,不知何故,我的代码正在工作,但我的UI没有得到

我正在将一个旧控件修改为WPF。我需要制作一个显示报警列表的数据网格。datagrid的第一列是datagridtemplate列,其中包含一个标志图标和日期。当用户按下按钮时,报警被确认,标志图标必须消失。我使用的是MVVM模式

问题是我似乎无法更新datagridtemplate列中的标志。当我将确认状态从0更改为1时,报警已确认,标志不会消失。当我重新加载控件并再次从服务器获取警报时,该标志不会再次显示,表明其状态实际上已在服务器中更新。因此,不知何故,我的代码正在工作,但我的UI没有得到更新。我还试图以同样的方式更改报警的描述,该列确实得到了更新。MainViewModelBase实现INotifyPropertyChanged

景色

您在setter中设置了_ackStatus,但没有从AlarmEntryViewModel中的getter返回此字段的值。这样做:

private bool _ackStatus;
public bool AckStatus
{
    get
    {
        return _ackStatus;
    }
    set
    {
        _ackStatus = value;
        RaisePropertyChanged(() => AckStatus);
    }
}
或在setter中设置_model.AcknStatus字段:

private bool _ackStatus;
public bool AckStatus
{
    get
    {
        if (_model.AcknStatus == 0)
            return false;
        else
            return true;

    }
    set
    {
        _ackStatus = value;
        _model.AcknStatus = value ? 1 : 0;
        RaisePropertyChanged(() => AckStatus);
    }
}
public class AlarmEntryViewModel : MainViewModelBase
    {
    #region Fields
    private readonly IViewManager _viewManager;
    private readonly IDockManager _dockManager;
    private string _description;

    #endregion

    #region Constructor

    public AlarmEntryViewModel()
    {
    }

    #endregion

    #region Model & Proxy

    private Alarm _model;
    public Alarm Model
    {
        set { _model = value; }
    }

    public AlarmListServiceProxy Proxy { get; set; }

    #endregion

    #region Properties

    public DateTime Time { get { return _model.Time; } }

    public string DateTimeString { get { return _model.Time.ToString("dd/MM/yyyy hh:mm:ss"); } }

    public int Severity { get { return _model.Severity; } }

    public string SeverityString
    {
        get
        {
            if (_model.Severity == 0)
                return "Melding";
            if (_model.Severity == 1)
                return "Waarschuwing";
            if (_model.Severity == 2)
                return "Fout";
            else
                return "Niet gekend";
        }
    }

    public string Description 
    { 
        get
        {
            //string substring = _model.Description.Substring(_model.Description.Length - 1);
            //if ( substring.Equals("\n"))
            //{
            //    return _model.Description.Substring(0, _model.Description.Length - 1);
            //}
            //else
            //    return _model.Description;
            return _description;
        }
        set
        {
            _description = value;
            RaisePropertyChanged(() => Description);
        }
    }

    public int AlarmNumber { get { return _model.Number; } }

    public int AcknStatus { get { return _model.AcknStatus; } }

    private bool _ackStatus;
    public bool AckStatus
    {
        get
        {
            if (_model.AcknStatus == 0)
                return false;
            else
                return true;

        }
        set
        {
            _ackStatus = value;
            RaisePropertyChanged(() => AckStatus);
        }
    }

    #endregion


}
private bool _ackStatus;
public bool AckStatus
{
    get
    {
        return _ackStatus;
    }
    set
    {
        _ackStatus = value;
        RaisePropertyChanged(() => AckStatus);
    }
}
private bool _ackStatus;
public bool AckStatus
{
    get
    {
        if (_model.AcknStatus == 0)
            return false;
        else
            return true;

    }
    set
    {
        _ackStatus = value;
        _model.AcknStatus = value ? 1 : 0;
        RaisePropertyChanged(() => AckStatus);
    }
}