Chr*_*ris 1 c# wpf xaml datagrid
我来自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>
Run Code Online (Sandbox Code Playgroud)
用户更新最后一个字段(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
}
Run Code Online (Sandbox Code Playgroud)
我如何在WPF中执行此操作?请注意,如果有帮助,DataGrid将绑定到匿名类型
哇,这不是它的意思:)
您通常应该绑定DataGrid到ItemsSource类型T的一个.在列内部,您应该绑定到类型T的属性.
Control然后,IntegerUpDown上的每个更改都将在基础Collection中表示.
要在以后访问此值,您ViewModel只需查询CollectionLinq以获取值.
您已在控件中获得此代码:
Value="{Binding Quantity, Mode=OneWay}"
Run Code Online (Sandbox Code Playgroud)
因此,您可以访问Quantity属性以获取所需的值.
请记住:如果用户应该能够更改数量Property,则Binding必须存在,Mode=TwoWay并且此属性也需要有公共设置者.
| 归档时间: |
|
| 查看次数: |
1773 次 |
| 最近记录: |