私は ASP.NET のバックグラウンドを持っており、WPF プロジェクトの維持を任されているので、かなりの学習曲線です。
次の XAML を持つ DataGrid があります。
<DataGrid Name="StockGV" AutoGenerateColumns="False" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Scanned" IsReadOnly="true">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Name="StatusImage" Source="tick.png"></Image>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding PalletScanned}" Value="False">
<Setter TargetName="StatusImage" Property="Source" Value="cross.png"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Pallet Number" IsReadOnly="True" Binding="{Binding PalletNumber}">
</DataGridTextColumn>
<DataGridTextColumn Header="Quantity" IsReadOnly="True" Binding="{Binding Quantity}">
</DataGridTextColumn>
<DataGridTemplateColumn IsReadOnly="true">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<xctk:IntegerUpDown HorizontalAlignment="Left" Name="integerUpDown1" Maximum="{Binding Quantity}" Minimum="0" VerticalAlignment="Top" Value="{Binding Quantity, Mode=OneWay}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding PalletScanned}" Value="False">
<Setter TargetName="integerUpDown1" Property="IsEnabled" Value="False"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
ユーザーは最後のフィールド (IntegerUpDown コントロール) を更新し、グリッドの下にある [保存] ボタンをクリックします。各行を反復処理し、IntegerUpDown コントロールの値を取得して、これを DB に保存するには、これが必要です。これが ASP.NET の場合、次のようにします。
foreach (GridViewRow row in gv.Rows)
{
long pk = (long)gv.DataKeys[row.RowIndex].Value;
int value = (int)((IntegerUpDown)row.FindControl("integerUpDown1")).Value;
//Save to DB
}
WPFでこれを行うにはどうすればよいですか? 役立つ場合は、DataGrid が匿名型にバインドされていることに注意してください。