質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

5607閲覧

WPF+Prism+ReactiveProperty環境で画面起動時のValidationをスキップしたい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

2クリップ

投稿2018/06/03 13:51

環境

VisualStudio2017(C#)
.NetFramework 4.7.2
Prism.Wpf 6.3.0
ReactiveProperty 5.0.0

前提・実現したいこと

現在PrismとReactivePropertyを使用してMVVMの画面作成を学習中です。
その中で解決方法がわからいことがあり、質問させていただきました。
Required属性が指定されているプロパティを画面にバインドした際に
画面初回起動時にコントロールの未入力チェックが走りコントロールがエラー状態になる
起動時の必須チェックはスキップして、起動後フォーカス移動をした際に初めて
エラー状態になるようにしたい。

ReactivePropertyを使用してこういった事は可能でしょうか?

該当のソースコード

XAML

C#

1<Window 2 x:Class="ValidationSample.Views.MainWindow" 3 xmlns="http://schemas.microsoft.c![イメージ説明](ff78d47fd7b91fa45bfa9a80196ee947.jpeg)fx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 6 xmlns:local="clr-namespace:ValidationSample.ViewModels" 7 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 8 xmlns:prism="http://prismlibrary.com/" 9 Title="タイトル" 10 Width="525" 11 Height="350" 12 d:DataContext="{d:DesignInstance local:MainWindowViewModel}" 13 prism:ViewModelLocator.AutoWireViewModel="True" 14 mc:Ignorable="d"> 15 <StackPanel> 16 <TextBox Margin="1" Text="{Binding Name.Value, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" /> 17 <TextBox /> 18 </StackPanel> 19</Window>

ViewModel

c#

1using Prism.Mvvm; 2using Reactive.Bindings; 3using System.ComponentModel.DataAnnotations; 4 5namespace ValidationSample.ViewModels 6{ 7 public class MainWindowViewModel : BindableBase 8 { 9 [Required(ErrorMessage = "必須項目です")] 10 public ReactiveProperty<string> Name { get; } 11 12 public MainWindowViewModel() 13 { 14 this.Name = new ReactiveProperty<string>().SetValidateAttribute(() => this.Name); 15 } 16 } 17} 18

C#

1using System.Wi![イメージ説明](1eea72741316d6c15d20a6f828d84ef9.jpeg) 2 3namespace ValidationSample.Views 4{ 5 /// <summary> 6 /// Interaction logic for MainWindow.xaml 7 /// </summary> 8 public partial class MainWindow : Window 9 { 10 public MainWindow() 11 { 12 InitializeComponent(); 13 } 14 } 15} 16

画面

画面起動時にテキストボックスが以下のように赤枠で囲われている
画面起動時は赤枠無しで、画面起動後のフォーカス移動時に初めて
必須チェックが行われ赤枠が表示されるようにしたい
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hihijiji

2018/06/04 03:58

NameプロパティをVMのコンストラクタで初期化せず、GotFocus の時に初期化すればいいのでは?
退会済みユーザー

退会済みユーザー

2018/06/06 09:23

回答ありがとうございます。 勉強不足で申し訳ないのですが、具体的にはどういった記述になりますでしょうか? コードビハインドでのイベントにReactiveProperty<string>()のインスタンスを設定するということでしょうか?
guest

回答1

0

ベストアンサー

亀レスですが、そういえば赤枠出さないようにすることが今出来ないので v5.1.1 で対応してみました。

https://medium.com/@okazuki/implement-an-input-form-which-has-validation-feature-using-reactiveproperty-4710b4e17943

やりかたは ReactiveProperty 生成時の mode に IgnoreInitialValidationError を追加する感じです。

cs

1new ReactiveProperty(mode: ReactivePropertyMode.Default | ReactivePropertyMode.IgnoreInitialValidationError); 2 3xxx.ToReactiveProperty(mode: ReactivePropertyMode.Default | ReactivePropertyMode.IgnoreInitialValidationError);

投稿2018/06/22 02:06

okazuki0130

総合スコア185

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/26 23:15

できました!! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問