

以下はボタン押下によって ViewA、ViewB に表示を切り替える、というプログラムです。  
ViewA、ViewB にそれぞれ必須入力のテキストボックスを追加しています。  
（<https://github.com/PrismLibrary/Prism-Samples-
Wpf/tree/master/17-BasicRegionNavigation> に少し手を加えたものになります）

ViewA、ViewB が最初に表示される時はテキストボックスに赤枠が表示される（エラーになる）のですが、ViewA → ViewB → ViewA
と表示した場合には赤枠が表示されません。テキストボックスに何か入力してから空にすると赤枠が表示されるので、必須チェック自体は無くなっていないようですが、表示切替時にのみ赤枠が表示されません。  
表示切替時にも赤い枠が表示されるようにするには、どうしたら良いでしょうか。

**MainWindow.xaml**

[code]

    <DockPanel LastChildFill="True">
        <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="5" >
            <Button Command="{Binding NavigateCommand}" CommandParameter="ViewA" Margin="5">Navigate to View A</Button>
            <Button Command="{Binding NavigateCommand}" CommandParameter="ViewB" Margin="5">Navigate to View B</Button>
        </StackPanel>
        <ContentControl prism:RegionManager.RegionName="ContentRegion" Margin="5"  />
    </DockPanel>
    
[/code]

**MainWindowViewModel.cs**

[code]

    public class MainWindowViewModel : BindableBase
    {
        private readonly IRegionManager _regionManager;
        public DelegateCommand<string> NavigateCommand { get; private set; }
        public MainWindowViewModel(IRegionManager regionManager)
        {
            _regionManager = regionManager;
            NavigateCommand = new DelegateCommand<string>(Navigate);
        }
        private void Navigate(string navigatePath)
        {
            if (navigatePath != null)
                _regionManager.RequestNavigate("ContentRegion", navigatePath);
        }
    }
    
[/code]

**ViewA.xaml**

[code]

    <StackPanel>
        <TextBox Text="{Binding RequiredText.Value, UpdateSourceTrigger=PropertyChanged}" Width="200"></TextBox>
    </StackPanel>
    
[/code]

**ViewB.xaml**

[code]

    <StackPanel>
        <TextBox Text="{Binding RequiredText.Value, UpdateSourceTrigger=PropertyChanged}" Width="200"></TextBox>
    </StackPanel>
    
[/code]

**ViewAViewModel.cs**

[code]

    public class ViewAViewModel : BindableBase
    {
        [Required]
        public ReactiveProperty<string> RequiredText { get; } = new ReactiveProperty<string>();
        public ViewAViewModel()
        {
            RequiredText.SetValidateAttribute(() => RequiredText);
        }
    }
    
[/code]

**ViewBViewModel.cs**

[code]

    public class ViewBViewModel : BindableBase
    {
        [Required]
        public ReactiveProperty<string> RequiredText { get; } = new ReactiveProperty<string>();
        public ViewBViewModel()
        {
            RequiredText.SetValidateAttribute(() => RequiredText);
        }
    }
    
[/code]


CC BY-SA 4.0
2020-03-04T05:43:33.290
63554
2020-03-04T12:45:53.837
2020-03-04T12:45:53.837
3060
3925
question
c# wpf prism
Content の切り替え時にエラーメッセージが消える