我有点不确定该怎么问这个问题
更新-现在包含代码示例
我正在构建一个"有趣"的UWP应用程序;我有一个用户启动的操作,我对集合中的每个项目执行一个操作。在这种情况下,我想让用户随时了解进展情况。
过去对我有效的一种方法(Winforms)是在每次处理项目时激发一个事件,并更新(例如)文本框的文本。我的UWP代码工作正常,只是它只显示最后一个操作的"状态",而不显示前面的操作。
问题:我处理这个问题完全错了吗,还是我需要做类似于文本框的操作。刷新()?(如果我这样做,我会很惊讶,.Refresh()看起来有点像20世纪90年代)
FYI,我使用的另一种方法是更新逻辑中的"status"属性,并让UI运行一个计时器,该计时器轮询逻辑中的当前状态(即在某个时间点而不是在逻辑中的事件上显示状态)。我只是还没有时间在任何UWP应用程序中尝试这个。
我很高兴被告知第二种方式"更好",但我也特别想了解为什么第一种方式不起作用。
首先,有一个类可以处理繁重的工作:
public class Enigma1Device : IEnigmaDevice
{
public event CharacterEnciphered OnCharacterEnciphered;
public string TypeMessage(string message)
{
StringBuilder output = new StringBuilder();
char[] chars = message.ToCharArray();
char temp;
if (OnCharacterEnciphered != null)
{
for (int c = 0; c < chars.Length; c++)
{
if (ValidInput(chars[c]))
{
temp = ProcessLetter(chars[c], c + 1);
output.Append(temp);
OnCharacterEnciphered(temp);
}
}
}
else
{
...
}
return output.ToString();
}
}
以及XAML页面,它调用这个:
public sealed partial class Enigma1Page : Page
{
public Enigma1Device EnigmaDevice;
private void Page_Loaded(object sender, RoutedEventArgs e)
{
EnigmaDevice = new Enigma1Device();
EnigmaDevice.OnCharacterEnciphered += EnigmaDevice_OnCharacterEnciphered;
}
private void stdEnigmaKeyboard_OnHereIsSomeTextToEncipher(string plaintext)
{
txtOutput.Text = EnigmaDevice.TypeMessage(plaintext);
}
private void EnigmaDevice_OnCharacterEnciphered(char l)
{
txtStatus.Text = l.ToString();
}
}
我是完全错了,还是需要做类似于文本框的操作。刷新()?(如果我这样做,我会很惊讶,.Refresh()看起来有点像20世纪90年代)
啊。。。否,如果每次更改值时都需要更新TextBlock.Text
,我们建议使用数据绑定,并实现INotifyPropertyChanged接口。你可以搜索很多样品。
我有一个用户启动的操作,我对集合中的每个项目执行一个操作。在这种情况下,我想让用户随时了解进展情况。
我没有发现你发布的任何代码与集合有关,我只是想知道你是否真的使用ListView或GridView来显示这个集合中的所有项目,并且你想更改每个ListViewItem
/GridViewItem
中TextBlock
的文本。如果是这样,您可以参考官方的ListView和GridView示例,了解它们如何处理集合和数据绑定。
无论如何,你需要的是UWP中的数据绑定,因为我不确定你想要实现什么,我没有在这里写演示,如果你有任何问题,你可以留下评论。
顺便说一下,你所说的"我的UWP代码工作正常,只是它只显示最后一个操作的‘状态’,而不是前面的操作。"是什么意思?