WPF Enable If Valid

<Window x:Class="HDI_WPF_EnableIfValid_cs.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation%22
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml%22
        Title="Window1" Height="300" Width="300" Loaded="Window_Loaded" >
    <Window.Resources>
        <Style TargetType="{x:Type Button}" x:Key="SingleValidStyle">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=txtAge, Path=(Validation.HasError)}" Value="true">
                    <Setter Property="IsEnabled" Value="false" />
                </DataTrigger>
            </Style.Triggers>
        </Style>

        <Style TargetType="{x:Type Button}" x:Key="MultiValidStyle">
            <Setter Property="IsEnabled" Value="false" />
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding ElementName=txtAge, Path=(Validation.HasError)}" Value="false" />
                        <Condition Binding="{Binding ElementName=txtName, Path=(Validation.HasError)}" Value="false" />
                    </MultiDataTrigger.Conditions>
                    <Setter Property="IsEnabled" Value="true" />
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>

    </Window.Resources>
    <StackPanel x:Name="EnabledRoot">
        <TextBox x:Name="txtName" Margin="10" Text="{Binding Name}" Width="200" HorizontalAlignment="Center"  />
        <TextBox x:Name="txtAge" Margin="10" Width="200" HorizontalAlignment="Center">
            <TextBox.Text>
                <Binding Path="Age">
                    <Binding.ValidationRules>
                        <ExceptionValidationRule />
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>
        <Button x:Name="btnSave" Content="Save Data" Style="{StaticResource MultiValidStyle}" HorizontalAlignment="center" Click="btnSave_Click" />
    </StackPanel>
</Window>

 

 

public partial class Window1 : Window
 {
  private Person localperson;
  public Window1()
  {
   InitializeComponent();
  }

  private void Window_Loaded(object sender, RoutedEventArgs e)
  {
   localperson = new Person() {Name="John Doe", Age=340};
   EnabledRoot.DataContext=localperson;
  }

  private void btnSave_Click(object sender, RoutedEventArgs e)
  {
   txtName.Text="Button Clicked";
  }
 }
 
 public class Person
 {
  public string Name { get; set; }
  public int Age { get; set; }
 }

 

posted @ 2009-11-26 13:39  pursue  阅读(177)  评论(0)    收藏  举报