私のMainWindowでは、TextBoxコントロール(各列に1セット)と保存ボタンを持つDataGridとStackPanelがあります。WPF DataGridで明示的にソースDataTableを更新します。
ユーザーがDataGridで行を選択すると、現在の行の詳細がテキストボックスに表示されます。 テキストボックス内の情報を編集して保存することができます(保存中に、ソースが更新されますUpdateSourceTrigger =明示的に使用)
問題は、DataGridの別の行を選択するとソースが更新されることです。しかし、私は保存ボタンをクリックするだけで更新したいです。
サンプルコード:
MainWindow.xaml
<Window x:Class="PrismTestProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:PrismTestProject"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:Model x:Key="model"/>
</Window.Resources>
<DockPanel DataContext="{StaticResource model}">
<DataGrid ItemsSource="{Binding Table, UpdateSourceTrigger=Explicit}" DockPanel.Dock="Left" IsSynchronizedWithCurrentItem="True"/>
<StackPanel DockPanel.Dock="Right">
<WrapPanel>
<Label Content="Name" Width="100"/> <TextBox Name="tbxName" Text="{Binding Table/Name, UpdateSourceTrigger=Explicit}" Width="100"/>
</WrapPanel>
<WrapPanel>
<Label Content="Age" Width="100"/>
<TextBox Name="tbxAge" Text="{Binding Table/Age,UpdateSourceTrigger=Explicit}" Width="100"/>
</WrapPanel>
<WrapPanel>
<Label Content="Qualification" Width="100"/>
<TextBox Name="tbxQualification" Text="{Binding Table/Qualification,UpdateSourceTrigger=Explicit}" Width="100"/>
</WrapPanel>
<Button Click="SaveButton_Click" Content="Save"/>
</StackPanel>
</DockPanel>
</Window>
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void SaveButton_Click(object sender, RoutedEventArgs e)
{
tbxName.GetBindingExpression(TextBox.TextProperty).UpdateSource();
tbxAge.GetBindingExpression(TextBox.TextProperty).UpdateSource();
tbxQualification.GetBindingExpression(TextBox.TextProperty).UpdateSource();
}
}
Model.cs
public class Model
{
public DataTable Table { get; set; }
public Model()
{
this.Table = new DataTable("Sample");
this.Table.Columns.Add("Name");
this.Table.Columns.Add("Age");
this.Table.Columns.Add("Qualification");
this.Table.Rows.Add("User 1", "55", "PG");
this.Table.Rows.Add("User 1", "40", "UG");
this.Table.Rows.Add("User 1", "35", "UG");
this.Table.Rows.Add("User 1", "60", "PG");
}
}
なぜ 'IsSynchronizedWithCurrentItem =" True "'を設定し、テキストボックスに値を取得するのですか? – AnjumSKhan
@AnjumSKhanを参照してくださいhttp://www.interact-sw.co.uk/iangblog/2007/09/03/bindtocurrent – Saravanakumar