Sử dụng MVVM. Tôi có một số DataTemplate
mà tôi đang sử dụng để hiển thị một bộ mở rộng với một số điều khiển trong mỗi đối tượng.Lỗi xác thực giãn nở WPF không được hiển thị khi mở rộng
<DataTemplate>
<Expander ExpandDirection="Down" IsExpanded="False">
<Expander.Header>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="Platform Group {0} {1}">
<Binding Path="PlatformGroupCode"/>
<Binding Path="PlatformGroupName"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Expander.Header>
<vw:PlatformGroup HorizontalAlignment="Left"/>
</Expander>
</DataTemplate>
Trong chế độ xem đó là 2 hộp văn bản được ràng buộc với 2 thuộc tính đó. Tôi đang sử dụng IDataErrorInfo
trong VM của tôi để làm xác nhận và tôi đã là một phong cách tài nguyên ứng dụng chính của tôi để hiển thị các thông báo lỗi như tooltips:
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
Khi một nhóm mới được thêm 2 thuộc tính có giá trị mặc định, không hợp lệ nên tôi muốn hộp văn bản màu đỏ để nhắc người dùng nhập dữ liệu. Điều này hoạt động nếu Expander's IsExpanded được đặt thành true. Nhưng nếu nó là sai tôi phải mở rộng và thay đổi giá trị trong một trong các hộp văn bản để có được đường viền màu đỏ và chú giải công cụ để hiển thị.
Tôi không muốn đặt trình mở rộng được mở rộng vì cuối cùng sẽ có một vài điều khiển. Làm thế nào tôi có thể nhận được biên giới màu đỏ để hiển thị ngay sau khi mở rộng được mở rộng? Thậm chí tốt hơn, là có một cách để làm cho mở rộng mới được mở rộng (khi người dùng thêm một nhóm mới tôi đang thêm một PlatformGroupviewModel để một observablecollection
của PlatformGroupviewModels)? chi tiết
EDIT hơn: quan điểm trên mức:
<StackPanel Orientation="Vertical">
<ScrollViewer VerticalScrollBarVisibility="Auto" MaxHeight="630">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*" />
<ColumnDefinition Width="5*" />
</Grid.ColumnDefinitions>
<StackPanel Orientation="Vertical" Grid.ColumnSpan="2" Grid.Row="1" HorizontalAlignment="Stretch">
<Expander ExpandDirection="Down" IsExpanded="True" Header="Header" HorizontalAlignment="Stretch" Name="expHeader" VerticalAlignment="Top">
<vw:Header DataContext="{Binding HeaderVM}"/>
</Expander>
<Expander ExpandDirection="Down" IsExpanded="True" Header="Platform Groups" HorizontalAlignment="Stretch" Name="expPlatformGroups" VerticalAlignment="Top">
<AdornerDecorator>
<vw:PlatformGroups DataContext="{Binding PlatformGroupsVM}"/>
</AdornerDecorator>
</Expander>
</StackPanel>
</Grid>
</ScrollViewer>
</StackPanel>
các PlatformGroups xem:
<StackPanel Orientation="Vertical" HorizontalAlignment="Stretch" Margin="10,10,10,10">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" Margin="0,10">
<Label Content="Number of platform groups" VerticalAlignment="Center"/>
<vw:IntegerInput MinValue="0" MaxValue="50" MaxLength="2" Text="{Binding Path=NumPlatformGroups, Mode=TwoWay,ValidatesOnDataErrors=True}" HorizontalAlignment="Left" VerticalAlignment="Center"/>
</StackPanel>
<ItemsControl IsTabStop="False" ItemsSource="{Binding PlatformGroups}" Margin="20,10" VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Expander ExpandDirection="Down" IsExpanded="False">
<Expander.Header>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="Platform Group {0} {1}">
<Binding Path="PlatformGroupCode"/>
<Binding Path="PlatformGroupName"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Expander.Header>
<AdornerDecorator>
<vw:PlatformGroup HorizontalAlignment="Left"/>
</AdornerDecorator>
</Expander>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.Template>
<ControlTemplate>
<Border BorderThickness="{TemplateBinding Border.BorderThickness}" Padding="{TemplateBinding Control.Padding}"
BorderBrush="{TemplateBinding Border.BorderBrush}" Background="{TemplateBinding Panel.Background}" SnapsToDevicePixels="True">
<ScrollViewer VerticalScrollBarVisibility="Auto" MaxHeight="400" CanContentScroll="True" Padding="{TemplateBinding Control.Padding}" Focusable="False">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
</ScrollViewer>
</Border>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
</StackPanel>
Bạn có 'ValidatesOnDataErrors = TRUE' đặt trên bindings TextBox của bạn? – Rachel
Có, tôi làm (mặc dù tôi chưa hiển thị mã cho 2 hộp văn bản). Lỗi xác thực hiển thị nếu IsExpanded = true. Điều này có vẻ là một vấn đề được biết đến với những người mở rộng, nhưng giải pháp được biết đến mà akjoshi đã đăng dường như không hoạt động trong trường hợp này. – Nix