我在窗口中有一些(> 20)控件,每个控件都绑定到ViewModel的属性。
ViewModel实现IDataErrorInfo
,以便进行一些验证,并且效果很好。
现在我在窗口中添加一个类似“提交”的按钮。如果任何控件有验证错误,我想禁用该按钮。
虽然我可以使用DataTrigger
来做这样的伎俩:
<Button Content="Commit">
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=control1, Path=(Validation.HasError)}" Value="True">
<Setter Property="Button.IsEnabled" Value="False" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=control2, Path=(Validation.HasError)}" Value="True">
<Setter Property="Button.IsEnabled" Value="False" />
</DataTrigger>
<!-- DataTriggers for control3, 4, 5... -->
</Style.Triggers>
</Style>
</Button.Style>
</Button>
这将是一个很长的XAML代码,因为我在这个窗口中有20多个控件,所以我想知道是否有更好的解决方案?
答案 0 :(得分:3)
也许你应该在ViewModel中创建一个命令。 像这样:
class ViewModel
{
public ICommand CommitCommand{ get; private set; }
public ViewModel()
{
CommitCommand = new RelayCommand(Commit, CanCommit);
}
private void Commit(object parameter)
{
// button click handler
}
private bool CanCommit(object parameter)
{
// check: view model has errors
}
}
实施ICommand界面,您可以访问:Wpf Tutorial
Xaml代码:
<Button Command={Binding CommitCommand}/>