WPF ContentControl ErrorTemplate - PullRequest
       5

WPF ContentControl ErrorTemplate

1 голос
/ 01 августа 2011

У меня есть элемент управления контентом, который имеет 2 шаблона данных следующим образом:

<ContentControl Content="{Binding ContentViewModel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">                    
<ContentControl.Resources>
<DataTemplate DataType="{x:Type vm:TypeA}">
<vs:TypeAView  />
</DataTemplate>                            

<DataTemplate DataType="{x:Type vm:TypeB}">
<vs:TypeBView  />                                
</DataTemplate>
</ContentControl.Resources>
</ContentControl>

Моя проблема в том, что и представление TypeA, и представление TypeB имеют текстовое поле, связанное со свойством Name. На моем содержащем элементе управления, когда элемент выбран из древовидного списка, установлено свойство ContentViewModel.

Данные отображаются и могут быть отредактированы, как я хочу. Однако у меня есть проблема, когда поле имени моего представления TypeB сделано недопустимым (я использую проверку EntLib 5 и реализовал IDataErrorInfo - поэтому моя привязка имеет ValidatesOnDataErrors = True). Хотя шаблон ошибки для элемента управления отображается должным образом, когда я затем нажимаю на TypeA в древовидной структуре, сообщение об ошибке по-прежнему отображается, даже если текстовое поле имени TypeA является допустимым.

Это похоже на перепутывание привязки, которая есть какая. Странно то, что это происходит только одним способом, то есть переходом от неверного имени TypeB к представлению TypeA. Похоже, не происходит при переходе из недопустимого представления TypeA.

Может кто-нибудь помочь указать, что я сделал не так?

Это шаблон ошибки, который я использую для текстового поля;

<Setter Property="Validation.ErrorTemplate">
                <Setter.Value>
                    <ControlTemplate>
                        <DockPanel LastChildFill="true">
                            <Border DockPanel.Dock="Left" Margin="0,0,2,0" Width="14" Height="14" CornerRadius="10"
                                ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors), Converter={StaticResource ErrorContentConverter}}">
                                <Border.Background>
                                    <RadialGradientBrush GradientOrigin="0.2,0.2" Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5">
                                        <RadialGradientBrush.GradientStops>
                                            <GradientStop Color="Pink" Offset="0" />
                                            <GradientStop Color="Red" Offset="1" />
                                        </RadialGradientBrush.GradientStops>
                                    </RadialGradientBrush>
                                </Border.Background>

                                <TextBlock Text="!" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="White" />
                            </Border>
                            <AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center">
                                <Border BorderBrush="Red" BorderThickness="1" />
                            </AdornedElementPlaceholder>
                        </DockPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...