繁体   English   中英

WPF DataGrid-遍历行并访问模板列中的控件

[英]WPF DataGrid - Iterating through rows and accessing control in template column

我来自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控件的值并将其保存到数据库。 如果这是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绑定到匿名类型

哇,这不像它的本意是:)

通常,您应该将DataGrid绑定到类型T的ItemsSource 。应该在列内部绑定到类型T的属性。

然后,IntegerUpDown Control上的每个更改都在基础Collection中表示。

要稍后在ViewModel访问此值,您只需使用Linq查询Collection以获取值。

您已经在控件中获得以下代码:

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

因此,您可以访问Quantity属性以获取所需的值。

请记住:如果用户应该能够更改Quantity Property ,则Binding必须为Mode=TwoWay并且该属性也必须有一个公共设置器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM