我的 .NET MAUI 应用程序的 XAML 中有一个实现了 TextChanged-Event 的条目。
我想防止输入文本为空,并在它为空时设置“0”。
因此,在 TextChanged-Event 中,如果是 string.IsNullOrEmptyCharacter(e.NewCalue),我将 .Text 分配给“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);