我怎样才能将项目的Validation.Error传播到ItemsControl?

时间:2014-08-26 05:08:14

标签: c# wpf

默认情况下,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>

1 个答案:

答案 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