質問編集履歴

3 微調整

退会済みユーザー

退会済みユーザー

2018/10/30 06:57  投稿

RactivePropertyで画面初期化時の必須エラーを表示させない方法
### 前提・実現したいこと
ReactivePropertyのSetValidateNotifyErrorで項目のチェック処理を行う際に
画面起動時必須エラーを表示させないようには以下の方法でできたのですが
https://blog.okazuki.jp/entry/2018/06/22/112213
一度画面で処理を行った後でTextBoxを初期化すると必須エラーが発生してしまいます
これを回避する方法はあるのでしょうか。
具体的には以下の通りです。
画面初回起動時は必須項目のFirstName、LastNameでエラーが発生していない
![イメージ説明](1750fddfdc724bd591f4d31e87cadeb5.jpeg)
FirstNameを一度入力して削除した場合、エラーが発生する
![イメージ説明](63a25853a5a5556df0f8314ebcc09c5c.jpeg)
FirstName,LastName入力後追加ボタンを押して、ListBoxに値追加
その後FirstName,LastNameの値をクリアすると必須エラーが発生し
赤枠表示になる
![イメージ説明](ced2fc93c81209adf5aefa2599891191.jpeg)
よろしくおねがいします
```XAML
<Window
   x:Class="BlankApp1.Views.MainWindow"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:prism="http://prismlibrary.com/"
   Title="{Binding Title}"
   Width="525"
   Height="350"
   prism:ViewModelLocator.AutoWireViewModel="True">
   <Grid>
       <StackPanel>
           <TextBlock Text="FirstName" />
           <TextBox Text="{Binding FirstName.Value, Mode=TwoWay}" />
           <TextBlock Text="LastName" />
           <TextBox Text="{Binding LastName.Value, Mode=TwoWay}" />
           <Button Command="{Binding CommandAdd}" Content="追加" />
           <ListBox ItemsSource="{Binding Items}" />
       </StackPanel>
   </Grid>
</Window>
```
```ViewModel
using Prism.Mvvm;
using Reactive.Bindings;
namespace BlankApp1.ViewModels
{
   public class MainWindowViewModel : BindableBase
   {
       public ReactiveProperty<string> FirstName { get; set; } = new ReactiveProperty<string>(mode: ReactivePropertyMode.Default | ReactivePropertyMode.IgnoreInitialValidationError);
       public ReactiveProperty<string> LastName { get; set; } = new ReactiveProperty<string>(mode: ReactivePropertyMode.Default | ReactivePropertyMode.IgnoreInitialValidationError);
       public ReactiveCollection<string> Items { get; set; } = new ReactiveCollection<string>();
       public ReactiveCommand CommandAdd { get; set; } = new ReactiveCommand();
       public MainWindowViewModel()
       {
           this.FirstName.SetValidateNotifyError(z => string.IsNullOrEmpty(z) ? "nullです" : null);
           this.LastName.SetValidateNotifyError(z => string.IsNullOrEmpty(z) ? "nullです" : null);
           this.CommandAdd.Subscribe(() =>
           {
               this.Items.Add(this.FirstName.Value + " " + this.LastName.Value);
               this.FirstName.Value = string.Empty;
               this.LastName.Value = string.Empty;
           });
       }
   }
}
```
  • C#

    14228 questions

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

2 微調整

退会済みユーザー

退会済みユーザー

2018/10/30 06:56  投稿

RactivePropertyで画面初期化時の必須エラーを表示させない方法
### 前提・実現したいこと
ReactivePropertyのSetValidateNotifyErrorで項目のチェック処理を行う際に
画面起動時必須エラーを表示させないようには以下の方法でできたのですが
https://blog.okazuki.jp/entry/2018/06/22/112213
一度画面で処理を行った後でTextBoxを初期化すると必須エラーが発生してしまいます
これを回避する方法はあるのでしょうか。
具体的には以下の通りです。
画面初回起動時は必須項目のFirstName、LastNameでエラーが発生していない
![イメージ説明](1750fddfdc724bd591f4d31e87cadeb5.jpeg)
FirstNameを一度入力して削除した場合、エラーが発生する
![イメージ説明](63a25853a5a5556df0f8314ebcc09c5c.jpeg)
FirstName,LastName入力後追加ボタンを押して、ListBoxに値追加
その後FirstName,LastNameの値をクリアすると必須エラーが発生し
赤枠表示になる
**画面起動時と同様にこの赤枠表示を行わない、もしくは、赤枠表示をクリアする方法はあるのでしょうか**
![イメージ説明](ced2fc93c81209adf5aefa2599891191.jpeg)
よろしくおねがいします
```XAML
<Window
x:Class="BlankApp1.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
Title="{Binding Title}"
Width="525"
Height="350"
prism:ViewModelLocator.AutoWireViewModel="True">
<Grid>
<StackPanel>
<TextBlock Text="FirstName" />
<TextBox Text="{Binding FirstName.Value, Mode=TwoWay}" />
<TextBlock Text="LastName" />
<TextBox Text="{Binding LastName.Value, Mode=TwoWay}" />
<Button Command="{Binding CommandAdd}" Content="追加" />
<ListBox ItemsSource="{Binding Items}" />
</StackPanel>
</Grid>
</Window>
```
```ViewModel
using Prism.Mvvm;
using Reactive.Bindings;
namespace BlankApp1.ViewModels
{
public class MainWindowViewModel : BindableBase
{
public ReactiveProperty<string> FirstName { get; set; } = new ReactiveProperty<string>(mode: ReactivePropertyMode.Default | ReactivePropertyMode.IgnoreInitialValidationError);
public ReactiveProperty<string> LastName { get; set; } = new ReactiveProperty<string>(mode: ReactivePropertyMode.Default | ReactivePropertyMode.IgnoreInitialValidationError);
public ReactiveCollection<string> Items { get; set; } = new ReactiveCollection<string>();
public ReactiveCommand CommandAdd { get; set; } = new ReactiveCommand();
public MainWindowViewModel()
{
this.FirstName.SetValidateNotifyError(z => string.IsNullOrEmpty(z) ? "nullです" : null);
this.LastName.SetValidateNotifyError(z => string.IsNullOrEmpty(z) ? "nullです" : null);
this.CommandAdd.Subscribe(() =>
{
this.Items.Add(this.FirstName.Value + " " + this.LastName.Value);
this.FirstName.Value = string.Empty;
this.LastName.Value = string.Empty;
});
}
}
}
```
  • C#

    14228 questions

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

1 微調整

退会済みユーザー

退会済みユーザー

2018/10/30 06:54  投稿

RactivePropertyで画面初期化時の必須エラーを表示させない方法
### 前提・実現したいこと
ReactivePropertyのSetValidateNotifyErrorで項目のチェック処理を行う際に
画面起動時必須エラーを表示させないようには以下の方法でできたのですが
https://blog.okazuki.jp/entry/2018/06/22/112213
一度画面で処理を行った後でTextBoxを初期化すると必須エラーが発生してしまいます
これを回避する方法はあるのでしょうか。
具体的には以下の通りです。
画面初回起動時は必須項目のFirstName、LastNameでエラーが発生していない
![イメージ説明](1750fddfdc724bd591f4d31e87cadeb5.jpeg)
FirstNameを一度入力して削除した場合、エラーが発生する
![イメージ説明](63a25853a5a5556df0f8314ebcc09c5c.jpeg)
FirstName,LastName入力後追加ボタンを押して、ListBoxに値追加
その後FirstName,LastNameの値をクリアすると必須エラーが発生し
赤枠表示になる
![イメージ説明](ced2fc93c81209adf5aefa2599891191.jpeg)
よろしくおねがいします
```XAML
<Window
   x:Class="BlankApp1.Views.MainWindow"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:prism="http://prismlibrary.com/"
   Title="{Binding Title}"
   Width="525"
   Height="350"
   prism:ViewModelLocator.AutoWireViewModel="True">
   <Grid>
       <StackPanel>
           <TextBlock Text="FirstName" />
           <TextBox Text="{Binding FirstName.Value, Mode=TwoWay}" />
           <TextBlock Text="LastName" />
           <TextBox Text="{Binding LastName.Value, Mode=TwoWay}" />
           <Button Command="{Binding CommandAdd}" Content="追加" />
           <ListBox ItemsSource="{Binding Items}" />
       </StackPanel>
   </Grid>
</Window>
```
```ViewModel
using Prism.Mvvm;
using Reactive.Bindings;
namespace BlankApp1.ViewModels
{
   public class MainWindowViewModel : BindableBase
   {
       public ReactiveProperty<string> FirstName { get; set; } = new ReactiveProperty<string>(mode: ReactivePropertyMode.Default | ReactivePropertyMode.IgnoreInitialValidationError);
       public ReactiveProperty<string> LastName { get; set; } = new ReactiveProperty<string>(mode: ReactivePropertyMode.Default | ReactivePropertyMode.IgnoreInitialValidationError);
       public ReactiveCollection<string> Items { get; set; } = new ReactiveCollection<string>();
       public ReactiveCommand CommandAdd { get; set; } = new ReactiveCommand();
       public MainWindowViewModel()
       {
           this.FirstName.SetValidateNotifyError(z => string.IsNullOrEmpty(z) ? "nullです" : null);
           this.LastName.SetValidateNotifyError(z => string.IsNullOrEmpty(z) ? "nullです" : null);
           this.CommandAdd.Subscribe(() =>
           {
               this.Items.Add(this.FirstName.Value + " " + this.LastName.Value);
               this.FirstName.Value = string.Empty;
               this.LastName.Value = string.Empty;
           });
       }
   }
}
```
  • C#

    14228 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る