3 つの列を持つデータグリッドがあり、DataTable にバインドされています。データグリッドの 3 番目の列に説明を書き込んでから、行の変更をデータベースに書き戻す必要があります。DataTable は、選択範囲をデータグリッドの次の行に移動したときにのみ更新されます。行が選択され、次の行に移動せずに 3 番目の項目が変更された場合、DataTable ソースは項目をすぐには変更しません。
編集: Geert のソリューションを適用して問題を解決するか、コマンド ボタンをデータグリッドと同じレイアウトに配置します。
XAML:
<DataGrid AutoGenerateColumns="False"
HorizontalAlignment="Stretch"
Width="Auto"
Height="Auto"
CanUserAddRows="False"
ItemsSource="{Binding Broadcasters, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Header="Id"
Width="Auto" IsReadOnly="True" Binding="{Binding Path=SEN_ID}"/>
<DataGridTextColumn Header="Sendername"
Width="Auto" IsReadOnly="True" Binding="{Binding Path=SEN_NAME}"/>
<DataGridTextColumn Header="Rabattvergabe"
Width="1*" Binding="{Binding Path=Rabatt, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataGrid.Columns>
</DataGrid>
ViewModel のプロパティ:
/// <summary>
/// Gets or sets the property value.
/// </summary>
public DataTable Broadcasters
{
get { return GetValue<DataTable>(BroadcastersProperty); }
set { SetValue(BroadcastersProperty, value); }
}
/// <summary>
/// Register the Broadcasters property so it is known in the class.
/// </summary>
public static readonly PropertyData BroadcastersProperty =
RegisterProperty("Broadcasters", typeof(DataTable), null);
保存コマンド:
/// <summary>
/// Gets the name command.
/// </summary>
public Command SaveCmd { get; private set; }
/// <summary>
/// Method to invoke when the name command is executed.
/// </summary>
private void exec_SaveCmd()
{
try
{
if (this.Broadcasters != null)
{
DataRow[] rows = Broadcasters.Select("Rabatt='1'");
//Do some work to save the result.
}
}
catch (Exception ex)
{
log.Fatal("exec_SaveCmd(): " + ex.Message + ", StackTrace: " + ex.StackTrace);
throw;
}
}