0

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;
        }
    }
4

1 に答える 1