默认情况下,WPF在TextBox中启用了验证。如果TextBox的TextTemplate由TextBox组成,我怎么能将TextBox的 Validation.Error 传播到其ItemsControl?我想将按钮的 IsEnabled 绑定到ItemsControl中项目的Validation.Error。
<ItemsControl ItemsSource="{Binding}"
x:Name="my_itemsControl">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding FirstName}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Button Content="Save">
<Button.IsEnabled >
<Binding ElementName="my_itemsControl"
Path="(Validation.HasError)" />
</Button.IsEnabled>
</Button>
答案 0 :(得分:0)
好的,我终于得到了一个使用MVVM模式的好解决方案。
<UserControl x:Class="MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Name="this_control">
<Button Content="Save"
Command="{Binding Path=SaveCommand}"
CommandParameter="{Binding ElementName=this_control}" />
</UserControl>
我在视图模型上绑定的ICommand属性就像
public ICommand SaveCommand
{
get
{
if (_saveCommand == null)
{
_saveCommand = new RelayCommand(
param => save(),
param => IsValid((DependencyObject)param) // actually the type of param is MyUserControl
);
}
return _saveCommand;
}
}
IsValid 基于fantastic trick