wpf DataGrid 数据绑定

2020-11-05 15:00发布

问题:

如何做到第一列做自增,剩余几列绑定List表中的数据。

(通过LoadingRow实现第一列的自增)
尝试过的方法一:
datagrid.Items.Clear();
datagrid.ItemsSource = null;
datagrid.ItemsSource = list;

Clear句报错:
错误信息:使用ItemsSource时操作无效。改为使用ItemsControl.ItemsSource访问和修改元素。

尝试过的方法二:
datagrid.ItemsSource = null;
datagrid.ItemsSource = list;
第二句报错:
错误信息:在使用 ItemsSource 之前,项集合必须为空。

回答1:

你怎么把wpf当winfom用阿,推荐使用绑定,不要直接给ItemsSource 赋值。绑定后,你新建数据时,只要给新建的数据的某个属性(和grid第一列绑定的那个属性)赋值就行了。伪代码如下:

void addCommand()
{
  this.items.Add(new Item{Order = this.Items.last().Order + 1});
}


回答2:

这种第一列显示序号的跟后台数据无关的不需要绑定

直接用事件:

<DataGrid x:Name="datagrid" ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" Style="{DynamicResource AzureDataGrid}" AutoGenerateColumns="False" IsReadOnly="True" LoadingRow="DataGrid_LoadingRow" >


private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = e.Row.GetIndex() + 1;
}


给你一个完整的把:
<Grid Grid.Row="1" Margin="10,5">
<GroupBox Style="{x:Null}" Margin="20,20,0,0" >
<DataGrid x:Name="datagrid" ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" Style="{DynamicResource AzureDataGrid}" AutoGenerateColumns="False" IsReadOnly="True" LoadingRow="DataGrid_LoadingRow" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding EditCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<DataGridTemplateColumn Header="{x:Static lang:Common.Index}" Width="50" MinWidth="10" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow}}, Path=Header}" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="测试时间" Binding="{Binding Path=TestTime}"/>
<DataGridTextColumn Header="测量用户" Binding="{Binding Path=UserName}"/>
<DataGridTextColumn Header="测量类型" Binding="{Binding Path=TestItemName}"/>
<DataGridTextColumn Header="测量结果" Binding="{Binding Path=ResultTargetName}"/>
<DataGridTextColumn Header="样品名称" Binding="{Binding Path=Data.Sample.Base.Name}"/>
</DataGrid.Columns>
</DataGrid>
</GroupBox>
</Grid>



标签: wpf