获取TabItem名称或标头(如果它具有验证错误)

时间:2019-02-04 09:20:39

标签: c# wpf validation mvvm

我有以下TabConrol

<telerik:RadTabControl 
        Grid.Row="2" VerticalAlignment="Top" SelectedIndex="{Binding SelectedIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
            DisplayMemberPath="Content" DropDownDisplayMode="Visible" ScrollMode="Item" BorderThickness="0">
        <telerik:RadTabItem DropDownContent="Job Config" Header="Job Config" >
            <telerik:RadTabItem.Content>
                <ScrollViewer  HorizontalScrollBarVisibility="Auto">
                    <local:JobGroupsCars DataContext="{Binding}" Margin="10" IsEnabled="{Binding Job.IsNotInEditMode ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
                </ScrollViewer>
            </telerik:RadTabItem.Content>
        </telerik:RadTabItem>
        <telerik:RadTabItem 
            DropDownContent="Job Info" Header="Job Info" >
            <telerik:RadTabItem.Content>
                <ScrollViewer  HorizontalScrollBarVisibility="Auto">
                    <local:JobDetailView DataContext="{Binding}" Margin="10" IsEnabled="{Binding Job.IsNotInEditMode ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
                </ScrollViewer>
            </telerik:RadTabItem.Content>
        </telerik:RadTabItem>

    <-- more tabs go here -->

    </telerik:RadTabControl>

如您所见,TabItem是一个用户控件 我要达到的目的是,当我单击“保存”按钮时,我想显示具有验证错误的名称

我能够获得所有验证错误,但是我无法显示哪个标签存在此错误(如下图所示)

validation errors

我尝试使用以下代码段,但它不起作用

<UserControl.Resources>

    <ControlTemplate x:Key="ValidationTabTemplate">

        <DockPanel LastChildFill="True">

            <Image Width="32" Height="32"

                   Source="../Assets/Delete_Icon.png" Opacity="0.75"

                   ToolTip="{Binding Path=AdornedElement.ToolTip, RelativeSource={RelativeSource AncestorType={x:Type Adorner}, Mode=FindAncestor}}"

            />

            <AdornedElementPlaceholder/>

        </DockPanel>

    </ControlTemplate>
    <Style x:Key="CustomTabError" TargetType="{x:Type telerik:RadTabItem}">

        <Style.Triggers>

            <Trigger Property="Validation.HasError" Value="true">

                <Setter Property="HeaderTemplate"

                            Value="{StaticResource ValidationTabTemplate}"/>


            </Trigger>

        </Style.Triggers>

    </Style>
</UserControl.Resources>

我正在将WPF与MVVM一起使用

任何帮助将不胜感激 非常感谢

1 个答案:

答案 0 :(得分:0)

好吧,比我的评论还要详细: 如果我正确理解您的要求,则希望增强包含错误的Tabcontrol: 想象一下,这是您的tabcontrol,而复选框是您的输入字段,我们将我们的标签项绑定到了每个复选框。 这将是您的自定义控件和.Validation.HasError属性

如果未选中任何复选框(或者在您的情况下发生错误),则使用多转换器将tabcontrol的前景变为红色

.item

转换器:

  <TabControl>
    <TabItem Header="Test">
        <TabItem.Foreground>
            <MultiBinding Converter="{StaticResource MultiEval}">
                <Binding  ElementName="CB1" Path="IsChecked"/>
                <Binding  ElementName="CB2" Path="IsChecked"/>
                <Binding  ElementName="CB3" Path="IsChecked"/>

            </MultiBinding>            
        </TabItem.Foreground>
        <StackPanel>                
            <CheckBox Name="CB1"></CheckBox>
            <CheckBox Name="CB2"></CheckBox>
            <CheckBox Name="CB3"></CheckBox>

        </StackPanel>
    </TabItem>

<Window.Resources>
    <loc:MultiEvaluator x:Key="MultiEval"/>
</Window.Resources>