我有一个按钮,根据几个文本框的validation.hasError属性启用/禁用它工作正常,直到我想根据一些业务逻辑从代码后面禁用和启用相同的按钮。例如。
if(recordExist) { btn.IsEnabled=true;} else{ btn.isenabled=false;}
现在发生的情况是,一旦执行了else
逻辑并且按钮被禁用,即使所有控件的validation.HasError
都返回false,也不会再次重新启用该按钮。并且如果执行if
逻辑并启用按钮,即使validation.hasError
返回true,它也会保持启用状态。我想要的是以某种方式重新触发multiDataTriggers
以检查Validation.hasError
上的textboxes
并相应地更新按钮的isEnabled
属性。我希望我足够清楚。
答案 0 :(得分:1)
请参阅MSDN上的Dependency Property Value Precedence。
设置本地值后,触发器无法覆盖它。您需要调整绑定,触发器等,以便将代码中的逻辑考虑在内。如果您正在使用MVVM(并且您应该),则可以将条件添加到视图模型中。
或者,如果您希望控件忘记本地值并让触发器优先,则可以使用ClearValue
。或者您可以使用SetCurrentValue
并避免优先使用新值。但是,您应该避免使用这些函数,它们会使您的代码更难理解和维护。