gpt4 book ai didi

c# - WPF MVVM 更新源但不更新 GUI

转载 作者:行者123 更新时间:2023-12-03 10:57:17 25 4
gpt4 key购买 nike

我正在设计一个 MVVM WPF 应用程序,其中一个控件是这样的,

<ListView Grid.Row="5"  Margin="0,5,0,0" ItemsSource="{Binding temps, Mode=TwoWay}"/>

在 ViewModel 中,我有
public class IndicatorLightVM:DependencyObject
{
/*---*/
public List<DataDev> temps { get; set;}
/*---*/

public IndicatorLightVM(IComm icomm, int moduleAddr = 1)
{
iComm = icomm;
pdm = new IndicatorLight(icomm, moduleAddr);
temps = pdm.DataDevs;
}

DataDevs 有一个 DataDev 列表作为属性,DataDev 是
public abstract class DataDev: INotifyPropertyChanged
{
public int ModuleAddr { get; set; }
private double _value;
public double Value {
get
{
return _value;
}
set
{
_value = value;
OnPropertyChanged("Value");
}
}
/*---*/
}

然后我调用一个方法来更新 Datadev 的值。当我跟踪代码时,值已更改,但 UI 未更新。
public override CommResults ReadData()
{
channelselect = DataDevs.Count(d => d.isTest);
byte[] recvbuf = new byte[channelselect * 2+7];
byte[] sendbuf = new byte[7];
sendbuf[0] = Convert.ToByte(ModuleAddr % 256);
sendbuf[1] = 0X07;
sendbuf[2] = 0X07;
sendbuf[3] = BoolsToBytes()[0];
sendbuf[4] = 0X00;

CommResults result = GetCommData(sendbuf, recvbuf, channelselect * 2+7);
if (result != CommResults.OK)
{
return result;
}
AnalyseData(recvbuf);
return CommResults.OK;
}

private void AnalyseData(byte[] recvbuf)
{
for (int i = 0; i < channelselect; i++)
{
byte ss = Convert.ToByte(recvbuf[i * 2 + 6] & 0xF8);
if (Convert.ToInt32(ss) == 0xF8)
{
DataDevs.Where(x=>x.isTest).ToArray()[i].Value = (-((256 - recvbuf[i * 2 + 6]) * 256 - recvbuf[i * 2 + 5]) * 0.0625);
}
else if (Convert.ToInt32(ss) == 0)
{
DataDevs.Where(x => x.isTest).ToArray()[i].Value = ((recvbuf[i * 2 + 6] & 7) * 256 + recvbuf[i * 2 + 5]) * 0.0625;
}
}
}

抱歉缺少代码。

最佳答案

问题是你不直接使用 Value在您的用户界面中。

解决方案:

<ListView
Grid.Row="5"
Margin="0,5,0,0"
ItemsSource="{Binding temps, Mode=TwoWay}"
DisplayMemberPath="Value"/>

您当前的方法遵循以下路线:
Value -> ToString -> GUI

所以 GUI 不知道它必须在 Value 上更新改变。 WPF 只有在知道 GUI 中正在使用的属性并且无法通过 ToString 工作时才会对属性更改通知使用react。但仅限于 ...Path="PropertyName"或使用针对该属性的绑定(bind)。

关于c# - WPF MVVM 更新源但不更新 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46031012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com