BindingGroup.CommitEdit()がダメだと言っている状態で、移動するとどうなるのか。。。
結論は、部分的に捨てられ、部分的に保存されます。
- BindingGroup.CommitEdit()は、Falseを返します。変更はすべて保留になり、ソースは元のままです。
- そこで、無理やり移動すると:
- 保存できるBindingは、個別にソースへ保存します。
- 保存できないBindingは、ソースへ保存しません(できません)。元のままです。
- 一貫性は、どうなる?
次の図をご覧ください。
DataContextは、CollectionViewSourceに。
CollectionViewSource.Sourceは、DataTableになっています。
Windowに、BindingGroupを使用しています。
Name : 文字列
Comment : 文字列
Age : Int16整数
XAML:
<Window x:Class="WpfApplication21.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="687"> <FrameworkElement.BindingGroup> <BindingGroup /> </FrameworkElement.BindingGroup> <Grid> <Label Content="Name:" HorizontalAlignment="Left" Margin="44,43,0,0" VerticalAlignment="Top"/> <TextBox HorizontalAlignment="Left" Height="23" Margin="110,47,0,0" TextWrapping="Wrap" Text="{Binding Name}" VerticalAlignment="Top" Width="120"/> <Label Content="Comment:" HorizontalAlignment="Left" Margin="21,93,0,0" VerticalAlignment="Top"/> <TextBox HorizontalAlignment="Left" Height="122" Margin="110,97,0,0" TextWrapping="Wrap" Text="{Binding Comment}" VerticalAlignment="Top" Width="292" AcceptsReturn="True"/> <Label Content="Age:" HorizontalAlignment="Left" Margin="55,237,0,0" VerticalAlignment="Top"/> <TextBox HorizontalAlignment="Left" Height="23" Margin="110,237,0,0" TextWrapping="Wrap" Text="{Binding Age,TargetNullValue=''}" VerticalAlignment="Top" Width="120"/> <Button Content="Back" HorizontalAlignment="Left" Margin="329,275,0,0" VerticalAlignment="Top" Width="75" Name="bBack" Click="bBack_Click" Height="34"/> <Button Content="Next" HorizontalAlignment="Left" Margin="409,275,0,0" VerticalAlignment="Top" Width="75" Name="bNext" Click="bNext_Click" Height="34"/> <Button Content="Save" HorizontalAlignment="Left" Margin="249,275,0,0" VerticalAlignment="Top" Width="75" Name="bSave" Click="bSave_Click" Height="34"/> <Button Content="New" HorizontalAlignment="Left" Margin="169,290,0,0" VerticalAlignment="Top" Width="75" Name="bNew" Click="bNew_Click" /> <DataGrid HorizontalAlignment="Left" Margin="423,10,0,0" VerticalAlignment="Top" Height="209" Width="246" ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" /> </Grid> </Window>
C#:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfApplication21 { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); cvs.Source = dt; DataContext = cvs; } DataSet1.DataTable1DataTable dt = new DataSet1.DataTable1DataTable(); CollectionViewSource cvs = new CollectionViewSource(); private void bBack_Click(object sender, RoutedEventArgs e) { cvs.View.MoveCurrentToPrevious(); } private void bNext_Click(object sender, RoutedEventArgs e) { cvs.View.MoveCurrentToNext(); } private void bSave_Click(object sender, RoutedEventArgs e) { MessageBox.Show(BindingGroup.CommitEdit() + ""); } private void bNew_Click(object sender, RoutedEventArgs e) { dt.Rows.Add(); } } }
操作:
0 件のコメント:
コメントを投稿