2011-07-19 33 views
2

私は本当に狂っていると思いますが、ツールチップではなく、分離されたテキストブロックで検証エラーを表示するソリューションを見つけることができませんそれは中のTextBoxでユーザータイプを何の関係もありません。WPF検証エラー:ツールチップではなく別のTextBlockで表示する方法

私はTHERユーザータイプをテキストボックスの検証の概要、独立したが含まれている1つのTextBlockを持っていると思います。

あなたはその行動のための解決策を知っていますか?

EDIT: 私の現在の実装では、そのように何とかなります

<TextBox Margin="{StaticResource WinHorizontalMargin}" 
     Style="{StaticResource WinInputBoxNormalStyle}"> 
    <TextBox.Text> 
     <Binding Path="AccessCode" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"> 
     <Binding.ValidationRules> 
      <ValidationRules:MandatoryValidationRule Field="Access Code"/> 
     </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

<!-- Content Error Message --> 
<TextBlock Grid.Row="2" Grid.ColumnSpan="2" Text="{Binding Path=(Validation.Errors)[0].ErrorContent}"> 
</TextBlock> 

おかげ - ゲルハルト

答えて

2

グリッドにBindingGroupを使用し、ユーザーがフォームを送信するときにすべてを検証できます。ここに示されているよう

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:WpfApplication1="clr-namespace:WpfApplication1" Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <WpfApplication1:ErrorsToMessageConverter x:Key="e2mConverter"/> 
    </Window.Resources> 
    <Grid x:Name="TheGrid"> 

     <Grid.BindingGroup> 
      <BindingGroup Name="UserInputBindingGroup"> 
       <BindingGroup.ValidationRules> 
        <WpfApplication1:MandatoryValidationRule/> 
       </BindingGroup.ValidationRules> 
      </BindingGroup> 
     </Grid.BindingGroup> 

     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <TextBox x:Name="theTextBox"> 
      <TextBox.Text> 
       <Binding Path="AccessCode" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">        
       </Binding> 
      </TextBox.Text> 
     </TextBox> 

     <!-- Content Error Message --> 
     <TextBlock Grid.Row="1" Text="{Binding ElementName=TheGrid, Path=(Validation.Errors), Converter={StaticResource e2mConverter}}"> 
     </TextBlock> 

     <Button Grid.Row="2" Content="Submit" Click="Button_Click" /> 
    </Grid> 
</Window> 

ボタンのクリックイベントがグリッドのBindingGroupをコミット:ウィンドウのDataContextのがクラスに設定されている

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    this.TheGrid.BindingGroup.CommitEdit(); 
} 

public class UserInputValues 
{ 
    public string AccessCode { get; set; } 
} 

検証は、検証メソッド内で行われますMandatoryValidationRuleクラスのクラス

public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
{ 
    BindingGroup bindingGroup = (BindingGroup) value; 
    UserInputValues userInputValues = (UserInputValues) bindingGroup.Items[0]; 


    object accessCode = bindingGroup.GetValue(userInputValues, "AccessCode"); 

    // Validation code here... 

    return new ValidationResult(false, "No no no!"); 
} 
+0

最初のステップでは機能しませんでした。しかし、あなたは私を正しい軌道に乗せました。ありがとう。乾杯、ゲルハルト – BitKFu

1

バインドerrorsの通知を提供しているテキストボックスに結合ElementNameを使用してのTextBlockを。検証エラーのコレクションをテキストに変換するコンバータを作成して、別のTextBlockに表示しやすくすることもできます。

+0

どうすればいいですか?私は私がしたことを示すために郵便で修正する。 – BitKFu

関連する問題