简体   繁体   English

从事件处理程序进行更新时,即使触发了Property Changed,MVVM View绑定也不会更新

[英]MVVM View binding does not update even with Property Changed fired when update happens from an event handler

I face the following issue: I use a class to encapsulate serial port operation as following: 我面临以下问题:我使用一个类来封装串行端口操作,如下所示:

 public class SNScanner : IDisposable
{
    public string COMPort { get; set; }
    public int Baudrate { get; set; }
    SerialPort sp;
    string Rsv;
    public SNScanner(string cOMPort, int bauderate)
    {
        COMPort = cOMPort;
        Baudrate = bauderate;
        sp = new SerialPort()
        {
            PortName = COMPort,
            BaudRate = Baudrate,
            DataBits = 8,
            StopBits = StopBits.One,
            Parity = Parity.None
        };
        sp.DataReceived += Sp_DataReceived;
        if (!sp.IsOpen)
        {
            sp.Open();
        }
    }

    private void Sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        Thread.Sleep(100);
        Rsv = string.Empty;
        Rsv = sp.ReadExisting();
        if (!string.IsNullOrEmpty(Rsv) && Rsv.Length == 17 )
        {
            OnSerialNumberDetected(new SerialNumberDetectedEventArgs {
                SerialNumber = Rsv.Substring(1,15) });
        }
    }



    #region Serial number detected event
    public event EventHandler SerialNumberDetected;

    protected virtual void OnSerialNumberDetected(EventArgs e) => SerialNumberDetected?.Invoke(this, e);

    public void Dispose()
    {
        sp.Close();
        try
        {
            sp.Dispose();
        }
        catch (Exception)
        {

        }
    }


    #endregion
}
public class SerialNumberDetectedEventArgs : EventArgs
{
    public string SerialNumber { get; set; }
}

when it detect a correct serial number that meet my criteria it fires onSerialNumberDetected event. 当它检测到符合我标准的正确序列号时,将触发onSerialNumberDetected事件。 In the view model i superscribe to this event as following: 在视图模型中,我将此事件叠加为以下内容:

        myscanner = new SNScanner("COM3", 9600);
        SerialNumber = "Empty";
        myscanner .SerialNumberDetected += myscanner_SerialNumberDetected;

    }

    private void myscanner_SerialNumberDetected(object sender, EventArgs e)
    {
        SerialNumber = ((SerialNumberDetectedEventArgs)e).SerialNumber;
    }


    private string _sn;

    public string SerialNumber
    {
        get { return _sn; }
        set { _sn = value; NotifyPropertyChanged(nameof(_sn)); }
    }

My view binding as following 我的视图绑定如下

<Window.DataContext>
    <local:mvm/>
</Window.DataContext>    
<Label FontFamily="Console"
                    FontSize="20"
                    Content="{Binding SerialNumber}"
                    Margin="5"
                    VerticalAlignment="Center"
                    Width="400"/>

During debugging the view model can receive the SerialNumber from the event but the view does not update. 在调试期间,视图模型可以从事件中接收序列号,但视图不会更新。

You are notifying wrong property name: 您正在通知错误的属性名称:

    public string SerialNumber
    {
        get { return _sn; }
        set { _sn = value; NotifyPropertyChanged(nameof(_sn)); }
    }

Instead of NotifyPropertyChanged(nameof(_sn)) should be NotifyPropertyChanged(nameof(SerialNumber)); 而不是NotifyPropertyChanged(nameof(_sn))应该是NotifyPropertyChanged(nameof(SerialNumber));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 当属性更改时,DataGridCheckBoxColumn 不会在 MVVM 中更新 - DataGridCheckBoxColumn does not update in MVVM when property is changed 从异步任务激发的事件中更新MVVM绑定 - Update MVVM binding from event fired by asynchronous task UWP数据绑定:事件处理程序中的属性更改不会更新UI - UWP data binding: property change in event handler does not update UI 在MVVM中,如果UI不需要更新,则模型中的属性是否需要属性更改事件? - in MVVM does a property in a model need a property changed event if the UI doesn't need to update? WPF:绑定到自定义类属性。 PropertyChanged被触发,但视图不会更新 - WPF: binding to custom class property. PropertyChanged is fired but view does not update 如何在MVVM中更改属性时更新UI更改 - How to update UI change when property changed in MVVM 什么时候应该解雇“财产变更”事件? - When should a “property changed” event be fired? 更改Content属性时会触发哪个事件 - Which event is fired when Content property is changed 属性更改时,与控件的绑定不会更新 - Binding to Control does not update when property changes Xamarin iOS - XAML IsVisible 绑定不会在 ItemsSource 更改时更新 - Xamarin iOS - XAML IsVisible binding does not update when ItemsSource is changed
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM