【发布时间】:2016-07-18 10:25:01
【问题描述】:
我有点不确定如何提出这个问题。
更新 - 现已包含代码示例。
我正在构建一个“有趣”的 UWP 应用程序;我有一个用户启动的操作,我对集合中的每个项目执行操作。我希望在发生这种情况时让用户了解进度。
过去对我有用的一种方法(Winforms)是每次我处理一个项目时触发一个事件,并更新(例如)文本框的文本。我的 UWP 代码工作正常,只是它只显示最后一个操作的“状态”,而不是前面的。
问题:我是不是完全错误地处理了这个问题,还是我需要做相当于 textbox.Refresh() 的事情? (如果我这样做,我会感到惊讶,.Refresh() 似乎有点 1990 年代)
仅供参考,我使用的另一种方法是更新逻辑中的“状态”属性,并让 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();
}
}
【问题讨论】:
-
如果您不显示您所做的任何代码,我们将无法提供帮助,最好是 mvce。同样重要的是要知道你是在做纯代码还是任何形式的绑定(mvvm)
-
Ehhh 如果没有代码,我们如何告诉您您是否正确接近,哈哈
-
是的,有点废话 - 现在提供了一些代码。
标签: user-interface event-handling uwp auto-update