3

我在页面中有一个文本框,该文本框绑定到已验证的模型属性,当出现错误时,不会显示错误模板!

几点:

  1. 我对自己的窗口中的控件没有验证问题(不在窗口内框架中显示的页面内)。
  2. 错误模板有效,它显示为窗口内的控件。
  3. 该模型正在验证,因为当识别出验证错误时页面中的“保存”按钮被禁用。

我“认为”问题在于控件位于框架内托管的页面内,因此数据上下文没有传递到页面,因为它似乎是孤立的。会是这样吗?如果是这样,我该如何解决这个问题?如果不是,那还能是什么?

代码(我当然简化了代码以隔离问题):

<Page x:Class="PIRS_Client.View.Staff.StaffDetailsView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:ignore="http://www.ignore.com"
    mc:Ignorable="d ignore"
    DataContext="{Binding StaffDetailsVM, Source={StaticResource Locator}}"
    Height="576" Width="1163">

<Grid>        
    <TextBox HorizontalAlignment="Left" Text="{Binding Model.title, ValidatesOnDataErrors=True}" Height="17" Margin="284,453,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="90"/>
    <Button Content="Save Changes" Command="{Binding SaveDetailsCommand}" IsEnabled="{Binding Model.IsValid}" HorizontalAlignment="Left" Margin="1007,518,0,0" VerticalAlignment="Top" Width="104" Height="23"/>
</Grid>

如果我可以添加任何进一步的信息或代码,请告诉我!

4

1 回答 1

0

问题解决了 - 它显示 Windows 有一个内置的装饰层,但 Pages 没有,我很乐意给你一个详细的解释,为什么没有,但我不知道为什么(阅读下文)。但解决方案是您需要将页面内容包装在装饰器装饰器中,以便为它们提供装饰器层。

这里要清楚的是“固定”代码:

<Page x:Class="PIRS_Client.View.Staff.StaffDetailsView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:ignore="http://www.ignore.com"
    mc:Ignorable="d ignore"
    DataContext="{Binding StaffDetailsVM, Source={StaticResource Locator}}"
    Height="576" Width="1163">

<AdornerDecorator>
    <Grid>        
        <TextBox HorizontalAlignment="Left" Text="{Binding Model.title, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" Height="17" Margin="284,453,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="90"/>
        <Button Content="Save Changes" Command="{Binding SaveDetailsCommand}" IsEnabled="{Binding Model.IsValid}" HorizontalAlignment="Left" Margin="1007,518,0,0" VerticalAlignment="Top" Width="104" Height="23"/>
    </Grid>
</AdornerDecorator>

如果您知道为什么页面不实现装饰层并且可以提供更深入的答案,请随时添加解释作为包含解决方案的另一个答案,即这个和解释,我会将您的答案更改为正确答案(而不是我的) - 只是为了促进分享知识;)

于 2013-11-12T14:29:50.147 回答