[英]How to update an Observable Collection with constantly changing data
我正在 C# 中编写一些代码,其中 Observable Collection 应该采用字符数组中的字符值,并根据初始化后的值显示晶圆的存在或不存在,这大约需要 30 秒才能完成。 但是,模型只是显示空白,没有涉及数据。 我尝试使用 {get; 公开数组 set;} 以及为初始化引入时间延迟但它仍然显示空白。 我想问一下如何让 Observable Collections 不断更新 Model 而不仅仅是 static。我尝试更改 XAML 文件中的 UpdateSourceTrigger,但也没有任何变化。 如果我能得到任何指示向我展示正确的方向,我将不胜感激。
public class LPMModel : NotifyPropertyChanged
{
#region Fields
private static int nextIndex, nextIndexL = 0;
private int index;
private int indexL;
private bool status;
private bool enable;
public char[] WafPreSta;
public char[] wmapLPM1 { get; set; }
private readonly ObservableCollection<WaferModel> sloatWaferCollection;
#endregion Fields
public int Index { get => indexL; set => indexL = value; }
public bool Status { get => status; set => status = value; }
public bool Enable { get => enable; set => enable = value; }
public ObservableCollection<WaferModel> SlotWaferCollection => sloatWaferCollection;
public override string ToString()
{
return string.Format("LPM #{0}", Index);
}
public LPMModel()
{
Thread.Sleep(30000);
indexL = ++nextIndexL;
index = nextIndex++;
sloatWaferCollection = new ObservableCollection<WaferModel>();
while (wmapLPM1 != null)
{
for (int i = 25; i > 0; i--)
{
switch (wmapLPM1[i-1])
{
case '1':
status = true;
break;
case '0':
status = false;
break;
default:
break;
}
//status = true;
sloatWaferCollection.Add(new WaferModel(status, i, this));
}
}
}
}
}
快速查看您的代码,我看不到您在哪里填写 wmapLPM1; 提供有关您的代码的更多详细信息,然后希望有人可以正确地帮助您
public class WaferModel
{
public int Index { get; set; } public bool Status { get; set; } public bool Enable { get; set; }
}
public class LPMModel : INotifyPropertyChanged
{
#region Fields
private static int nextIndex, nextIndexL = 0;
private int index;
private int indexL;
private bool status;
private bool enable;
public char[] WafPreSta;
public char[] wmapLPM1 { get; set; }
private readonly ObservableCollection<WaferModel> sloatWaferCollection;
public event PropertyChangedEventHandler PropertyChanged;
#endregion Fields
public int Index { get => indexL; set => indexL = value; }
public bool Status { get => status; set => status = value; }
public bool Enable { get => enable; set => enable = value; }
//public ObservableCollection<WaferModel> SlotWaferCollection = new();
public override string ToString()
{
return string.Format("LPM #{0}", Index);
}
public LPMModel()
{
sloatWaferCollection = new ObservableCollection<WaferModel>();
}
public void runLPML()
{
Thread.Sleep(30);
indexL = ++nextIndexL;
index = nextIndex++;
int count = 25;
WaferModel wafer = new();
while (wmapLPM1 != null)
{
for (int i = count; i > 0; i--)
{
switch (wmapLPM1[i - 1])
{
case '1':
status = true;
break;
case '0':
status = false;
break;
default:
break;
}
//status = true;
wafer.Status = status;
wafer.Index = i;
wafer.Enable = true;//false?
sloatWaferCollection.Add(wafer);
count -= 1;
Console.WriteLine(sloatWaferCollection);
}
}
}
}
这是加载 wmapLPM1 的代码。 我尝试以 markdown 格式对其进行编辑,但我不确定它会如何出现在评论中。
void CommMap1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] buff = new byte[9600];
commMap1.Read(buff, 0, 9600);
string response = System.Text.Encoding.ASCII.GetString(buff, 0, 9600);
int map1start = response.IndexOf("/");
string mapLPM1 = response.Substring(map1start + 1, 25);
wmapLPM1 = mapLPM1.ToCharArray();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.