Xaml 在代码中设置值时禁用控件回调?

Xaml 在代码中设置值时禁用控件回调?,xaml,uwp,Xaml,Uwp,我注意到,当控件(如AutoSuggestBox)具有回调时,在用户与控件交互时以及在我的代码更改关联值时都会执行回调 例如,如果我在AutoSuggestBox上设置TextChanged属性,则即使代码将Text属性设置为初始值,也会调用该函数 这在我的应用程序中造成了错误和不必要的函数调用形式的问题。你可能想知道代码是怎么变成这种状态的——答案是,我不知道。这个项目是由另一个开发人员交给我的,我的任务是修复一些bug 虽然我可以单独查找代码中发生这种情况的所有位置并临时删除回调,但我想知道

我注意到,当控件(如AutoSuggestBox)具有回调时,在用户与控件交互时以及在我的代码更改关联值时都会执行回调

例如,如果我在AutoSuggestBox上设置TextChanged属性,则即使代码将Text属性设置为初始值,也会调用该函数

这在我的应用程序中造成了错误和不必要的函数调用形式的问题。你可能想知道代码是怎么变成这种状态的——答案是,我不知道。这个项目是由另一个开发人员交给我的,我的任务是修复一些bug


虽然我可以单独查找代码中发生这种情况的所有位置并临时删除回调,但我想知道是否有更简单的方法,例如,我可以在控件上设置一个属性,该属性表示“当代码进行更改而不是UI进行更改时,不要调用回调”.

对于
AutoSuggestBox.TextChanged
事件,触发原因的属性在
autosuggestboxtextchangedventargs
中提供,您可以基于此进行判断

private void AutoSuggestBox\u TextChanged(AutoSuggestBox发送方、autosuggestboxtextchangedventargs args)
{
if(args.Reason==AutoSuggestionBoxTextChangeReason.ProgrammaticChange)
{
返回;
}
//其他代码
}
对于其他控件,您需要根据自己的情况处理它们


致以最诚挚的问候。

您可以在设置初始文本后立即注册TextChanged事件,这样它就不会被调用两次。如果要多次从代码中设置文本,则可以取消注册事件,然后设置文本,然后再次注册。对于任何xaml控件,都可以遵循此操作。希望这有帮助。在上面的注释注册和注销方法中,您可以使用+=,而不是在xaml本身中,在代码隐藏中注册事件。