用户界面-UWP-文本块.每次事件更改值时,文本都不会更新



我有点不确定该怎么问这个问题
更新-现在包含代码示例

我正在构建一个"有趣"的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/GridViewItemTextBlock的文本。如果是这样,您可以参考官方的ListView和GridView示例,了解它们如何处理集合和数据绑定。

无论如何,你需要的是UWP中的数据绑定,因为我不确定你想要实现什么,我没有在这里写演示,如果你有任何问题,你可以留下评论。

顺便说一下,你所说的"我的UWP代码工作正常,只是它只显示最后一个操作的‘状态’,而不是前面的操作。"是什么意思?

相关内容

  • 没有找到相关文章

最新更新