1

内部にTextBoxを持つUserControlがあります。TextBox レベルでエラーが発生したときに、 UserControl レベルでメッセージを表示したい。また、TexBox レベルでエラー メッセージも表示します。

MVVM は使用していません。これは再利用可能なコントロールです。ただし、これは再利用可能なコントロールであり、それを使用するユーザーは、MVVM 自体を使用する可能性があります。

次のようにビューに追加します。

<myUserControlNamespace:MyUserControl x:Name="control1" Value="{Binding Value}" OtherProperty="{Binding OtherValue}" />

内部の私のコントロールには、「値」にバインドされた TexBox があります。値は Double であるため、ユーザーが TexBox に文字を入力すると、エラーがスローされます。私の TextBox は次のようにバインドされています。

<TextBox Grid.Column="1" x:Name="valueTextBox" Style="{DynamicResource ValidatingTextBox}"                 
            Validation.ValidationAdornerSite="{Binding ElementName=valueTextBox}" 
            Validation.ValidationAdornerSiteFor="{Binding}" >
<TextBox.Text>
    <MultiBinding Converter="{StaticResource MyConverter}"Mode="TwoWay" >
        <Binding RelativeSource="{RelativeSource AncestorType={x:Type unitConversion:UnitConversionControl}}" UpdateSourceTrigger="PropertyChanged" Path="Value" Mode="TwoWay" />
        <Binding RelativeSource="{RelativeSource AncestorType={x:Type unitConversion:UnitConversionControl}}" Path="OtherProperty"/>                    
    </MultiBinding>
</TextBox.Text>

Style ValidatingTexBox には次のようなものがあります。

<Style x:Key="ValidatingTextBox" TargetType="{x:Type TextBox}">
<Setter Property="Validation.ErrorTemplate">
    <Setter.Value>
        <ControlTemplate>
            <StackPanel Orientation="Vertical">
                <AdornedElementPlaceholder />
                <TextBlock Foreground="Red" Text="{Binding ErrorContent}"  Height="16" Margin="2"/>
            </StackPanel>
        </ControlTemplate>
    </Setter.Value>
</Setter>
<Style.Triggers>
    <Trigger Property="Validation.HasError" Value="True">
        <Setter Property="Background"
            Value="LightPink" />
        <Setter Property="Foreground"
            Value="Black" />
        <Setter Property="Margin" Value="5,5,5,28"/>
        <Setter Property="ToolTip"
            Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
    </Trigger>
</Style.Triggers>

クライアントのユーザーに、TextBox を使用するのと同様の方法でコントロールを使用してもらいたいと考えています。MyUserControl スタイルを設定し、Validation.ErrorTemplate を使用してエラーを表示します。

TexBox にエラーがある場合、コントロールにもエラーが発生するようにしたいので、コントロールを使用しているユーザーは、たとえば Validation.ErrorTemplate を使用してエラーを処理できます。

エラーを「カスケード」する方法はありますか?

私はこのSOの質問を読みました.彼はINotifyDataErrorInfoを使用しています.Net 4.0を使用しているためできませんが、代わりに IDataErrorInfo を使用できることを読みました コントロールに IDataErrorInfo を実装させる必要があります。これは正しいです?

さらに詳細を追加する必要がある場合はお知らせください。

4

0 に答える 0