前提・実現したいこと
DataGridでの入力チェック結果を取得する処理を考えているのですが
エラー結果が正しく取得できず悩んでいます。
現状では、DataGridの先頭セルで発生したエラーメッセージしか取得できません。
Q1.先頭以外のセルで発生したエラーメッセージを取得するにはどうすればよろしいでしょうか?
Q2.複数セルでエラーが発生した場合に、最後に発生したエラーのエラーメッセージを取得するにはどの様にすればよいでしょうか?
[参考HP] https://blog.okazuki.jp/entry/2014/05/07/014133
ViewModel
1public class MainWindowViewModel : BindableBase 2{ 3 public List<Person> People { get; } 4 5 public ReactiveProperty<string> Result { get; private set; } 6 7 public MainWindowViewModel() 8 { 9 this.People = new List<Person> 10 { 11 new Person() { Name = new ReactiveProperty<string>("aaa") }, 12 new Person() { Name = new ReactiveProperty<string>("bbb") }, 13 new Person() { Name = new ReactiveProperty<string>("ccc") } 14 }; 15 16 // チェック処理実施 17 this.People.ForEach(z => z.Name = z.Name.SetValidateAttribute(() => z.Name)); 18 19 // 先頭のエラーメッセージを取得したいが 20 this.Result = this.People.Select(z => z.Name 21 // エラーが発行されるIO<IE>を変換する 22 .ObserveErrorChanged 23 // エラーがない場合nullになるので空のIEにする 24 .Select(e => e ?? Enumerable.Empty<object>()) 25 // 最初のエラーメッセージを取得する 26 .Select(e => e.OfType<string>().FirstOrDefault()) 27 // ReactiveProperty化 28 .ToReactiveProperty()) 29 30 // ★★★これだと先頭セルのエラーしか取得できない 31 .First(); 32 } 33} 34 35public class Person 36{ 37 [Required(ErrorMessage = "必須エラー")] 38 public ReactiveProperty<string> Name { get; set; } 39}
View
1<Window x:Class="BlankApp3.Views.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:prism="http://prismlibrary.com/" 5 Width="525" 6 Height="350" 7 prism:ViewModelLocator.AutoWireViewModel="True"> 8 <StackPanel Margin="0,3,0,-3"> 9 <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding People}"> 10 <DataGrid.Columns> 11 <DataGridTextColumn Binding="{Binding Name.Value, Mode=TwoWay}" Header="名前" IsReadOnly="False" /> 12 </DataGrid.Columns> 13 </DataGrid> 14 <StackPanel Orientation="Horizontal"> 15 <TextBlock Text="結果" /> 16 <TextBlock Text="{Binding Result.Value}" /> 17 </StackPanel> 18 </StackPanel> 19</Window>
上記のソースだと、一番上のセルしかエラーメッセージが取得できず
その他のセルの値を空にしてもエラーメッセージが取得できない
・2番目のセルを空に(エラーにはなるがエラーメッセージが取得できない)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/08/29 23:13