MultiDataTrigger一旦按钮isEnabled属性从代码后面更改,则不触发

时间:2015-05-23 05:18:57

标签: c# wpf validation xaml multidatatrigger

我有一个按钮,根据几个文本框的validation.hasError属性启用/禁用它工作正常,直到我想根据一些业务逻辑从代码后面禁用和启用相同的按钮。例如。

if(recordExist) { btn.IsEnabled=true;} else{ btn.isenabled=false;}

现在发生的情况是,一旦执行了else逻辑并且按钮被禁用,即使所有控件的validation.HasError都返回false,也不会再次重新启用该按钮。并且如果执行if逻辑并启用按钮,即使validation.hasError返回true,它也会保持启用状态。我想要的是以某种方式重新触发multiDataTriggers以检查Validation.hasError上的textboxes并相应地更新按钮的isEnabled属性。我希望我足够清楚。

1 个答案:

答案 0 :(得分:1)

请参阅MSDN上的Dependency Property Value Precedence

设置本地值后,触发器无法覆盖它。您需要调整绑定,触发器等,以便将代码中的逻辑考虑在内。如果您正在使用MVVM(并且您应该),则可以将条件添加到视图模型中。

或者,如果您希望控件忘记本地值并让触发器优先,则可以使用ClearValue。或者您可以使用SetCurrentValue并避免优先使用新值。但是,您应该避免使用这些函数,它们会使您的代码更难理解和维护。