[英]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.