0

Is it possible to create TabItem MultiTrigger that will bind to Valiation.HasError property from a control that:

  • is a part of another UserControl
  • UserControl is defined in another xaml file
  • UserControl is a child of TabItem where MultTrigger is defined

Main xaml file:

<telerik:RadTabItem Header="Data">
    <telerik:RadTabItem.Style>
        <Style TargetType="{x:Type telerik:RadTabItem}" BasedOn="{StaticResource {x:Type telerik:RadTabItem}}">
            <Setter Property="HeaderTemplate" Value="{StaticResource TabItemErrorTemplate}"/>
            <Style.Triggers>
                 <MultiDataTrigger>
                     <MultiDataTrigger.Conditions>
                         <!-- does not work -->
                         <Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:EquipmentDetailsTabBasicData}}, Path=InputName.(Validation.HasError)}" Value="False"/>
                         <!-- works only if UserControl content is inculded directly in TabItem -->
                         <Condition Binding="{Binding ElementName=InputPiecesCount}, Path=(Validation.HasError)}" Value="False"/>
                     </MultiDataTrigger.Conditions>
                     <Setter Property="HeaderTemplate" Value="{StaticResource TabItemTemplate}"/>
                 </MultiDataTrigger>
             </Style.Triggers>
         </Style>
     </telerik:RadTabItem.Style>
     <local:EquipmentDetailsTabBasicData x:Name="TabBasicData"/>
</telerik:RadTabItem>

local:EquipmentDetailsTabBasicData xaml file looks like this:

<UserControl>
    <Grid>
        <telerik:RadMaskedTextInput 
            x:Name="InputName"
            Value="{Binding Name, ValidatesOnDataErrors=True, NotifyOnValidationError=True}"/>
        <telerik:RadMaskedNumericInput 
            x:Name="InputPiecesCount"
            Value="{Binding PiecesCount, ValidatesOnDataErrors=True, NotifyOnValidationError=True, Mode=TwoWay}"
            />
    </Grid>
</UserControl>

MultDataTrigger conditions shows my attempts to bind to controls in child UserControl - both do not work.

I can just move UserControl contents to RadTabItem. When I do the second version (binding by ElementName) works OK. I would like to avoid it because it makes my xaml file hard to maintain.

The first version is taken from this answer, but it does not work and I think that because UserControl is not an ancestor of RadTabItem.

Lukasz
  • 185
  • 1
  • 10
  • Have you tried adding `local:EquipmentDetailsTabBasicData` as a `StaticResource` where you use your `MultiBinding`? And use it as a `Template` for a `Control`? – XAMlMAX Jun 13 '17 at 15:05
  • I am not sure what do you mean exactly. To set content from local:EquipmentDetailsTabBasicData as TabItem template? – Lukasz Jun 19 '17 at 12:08
  • Nope, I mean use the `local:EquipmentDetailsTabBasicData` like ` ` in your `TabItem` `Resources` tag. Then use it like this ``. – XAMlMAX Jun 19 '17 at 12:22

0 Answers0