1

私は 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 が匿名型にバインドされていることに注意してください。

4

1 に答える 1

5

うわー、それは意図されたものとは異なります:)

通常DataGridItemsSourceをタイプ T の にバインドする必要があります。列内では、タイプ T のプロパティにバインドする必要があります。

IntegerUpDown のすべての変更Controlは、基になる Collection で表されます。

後でこの値にアクセスするには、LinqViewModelでクエリを実行して値を取得します。Collection

コントロールには既にこのコードがあります。

Value="{Binding Quantity, Mode=OneWay}"

したがって、Quantity プロパティにアクセスして、必要な値を取得できます。

Property覚えておいてください: ユーザーが Quantityを変更できる必要がある場合は、変更する必要BindingMode=TwoWayあり、このプロパティのパブリック セッターも必要です。

于 2012-12-14T11:49:28.750 に答える