使用不同视图/视图模型进行Tabcontrol验证

时间:2016-02-06 23:22:53

标签: c# wpf mvvm tabcontrol idataerrorinfo

我使用MVVM设计模式创建了一个WPF应用程序。 MainView有一个带有两个项目的tabcontrol,每个项目都有一个不同的View / ViewModel,如下面的代码所示

    <TabControl>
        <TabItem Header="Test 2" DataContext="{Binding CurrentTest2ViewModel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
            <AdornerDecorator>
                <local:Test2View></local:Test2View>
            </AdornerDecorator>
        </TabItem>             
            <TabItem Header="Test 1" DataContext="{Binding CurrentTest1ViewModel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
            <AdornerDecorator>
                <local:Test1View></local:Test1View>
            </AdornerDecorator>
        </TabItem>
    </TabControl>

在两个ViewModel中的一个中,我使用IDataErrorInfo接口来验证属性。相应的View具有以下代码

<StackPanel Orientation="Vertical">
    <CheckBox HorizontalAlignment="Left" Width="80" Content="IsRed" IsChecked="{Binding IsRed, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" IsEnabled="{Binding IsEnabled}">
        <Validation.ErrorTemplate>
            <ControlTemplate>
                <StackPanel Orientation="Horizontal">
                    <AdornedElementPlaceholder />
                    <Label Content="{Binding Path=ErrorContent}" ToolTip="{Binding Path=ErrorContent}" />
                </StackPanel>
            </ControlTemplate>
        </Validation.ErrorTemplate>
    </CheckBox>
    <CheckBox HorizontalAlignment="Left" Width="80" Content="IsGreen" IsChecked="{Binding IsGreen, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" IsEnabled="{Binding IsEnabled}">
        <Validation.ErrorTemplate>
            <ControlTemplate>
                <StackPanel Orientation="Horizontal">
                    <AdornedElementPlaceholder />
                    <Label Content="{Binding ErrorContent}" ToolTip="{Binding ErrorContent}" />
                </StackPanel>
            </ControlTemplate>
        </Validation.ErrorTemplate>
    </CheckBox>
</StackPanel>

当第一次显示该项时,验证会发现某些属性的值不正确,因为我可以通过断点查看,但错误消息未显示在屏幕上。要重现错误消息,我需要在正确的值之前选择,之后当值无效时,将显示错误消息。

我的问题是:

1)如何在第一次在屏幕上显示项目时重现验证的错误消息? 2)如果我只使用主视图而不使用任何项目的不同视图,为什么我没有问题?

非常感谢你。

0 个答案:

没有答案