使用 TextChanged-Event 防止绑定循环

问题描述 投票:0回答:1

我的 .NET MAUI 应用程序的 XAML 中有一个实现了 TextChanged-Event 的条目。

我想防止输入文本为空,并在它为空时设置“0”。

因此,在 TextChanged-Event 中,如果是 string.IsNullOrEmptyCharacter(e.NewCalue),我将 .Text 分配给“0”。但是现在,在我的模型中,绑定值属性在无限循环中被调试器击中。

我将如何解决这个问题?仍然想确保在朗诵/删除文本时,模型和模型的更改都会更新文本。

我应该怎么做?

data-binding maui
1个回答
0
投票

因为你还没有发布你的代码,我会给出一个通用的答案。

无限循环的发生是因为您的 text-changed 方法正在更改值,因此再次触发 text-changed.

解决方案是确保如果由于您的程序更改而导致文本更改触发,您“什么都不做”。

一种方法是“什么都不做”,如果你的逻辑实际上没有引起变化:

... MyTextChanged(string oldValue, string newValue)
{
    string alteredNewValue = newValue;

    ... // Logic that examines newValue, MAYBE comes up with a different value.

    // Avoids infinite loop, in case above logic tries to set same value again
    if (alteredNewValue == newValue)
        return;   // DON'T set the property again!

    // CAUTION: POTENTIAL INFINITE LOOP.
    MyTextProperty = alteredNewValue;
}

另一个可能的修复

如果在 TextChanged 处理程序期间再次设置该属性,则可能存在潜在问题。如果是这样,一个更简单的修复方法是 queue 属性设置,因此它发生在 Maui 完成其更改处理之后:

...
Dispatcher.Dispatch(() => MyTextProperty = alteredNewValue);
© www.soinside.com 2019 - 2024. All rights reserved.