数据网格中的进度条
本文关键字:数据网 网格 数据 | 更新日期: 2023-09-27 18:35:19
我试图像这样向列添加进度条
<DataGrid Grid.Row="1" ItemsSource="{Binding Locations}" AutoGenerateColumns="false">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Plant}" Header="Plant" />
<DataGridTextColumn Binding="{Binding Area}" Header="Area" />
<DataGridTextColumn Binding="{Binding LocationName}" Header="Location" />
<DataGridTextColumn Binding="{Binding LocationVersion}" Header="Version on location" />
<DataGridCheckBoxColumn Binding="{Binding Deploy, Mode=TwoWay}" Header="Check to deploy" IsReadOnly="False" />
<DataGridTemplateColumn Header="Orders Count" Width="380">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<ProgressBar Grid.Row="0" Grid.Column="0" Minimum="0" Maximum="200" Value="{Binding copyToLocationProgress ,Mode=OneWay}"/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
这是我正在使用的 ILocation:
public interface ILocation
{
int LocationId { get; }
string LocationName { get; set; }
string Area { get; set; }
string LocationVersion { get; set; }
int Plant { get; set; }
bool Deploy { get; set; }
string FolderName { get; }
int copyToLocationProgress { get; set; }
}
这是在视图模型中
public IEnumerable<ILocation> Locations { get; set; }
我也试过这种方式
<DataGridTemplateColumn Header="Deploy progress" Width="380">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<ProgressBar
Grid.Row="0"
Grid.Column="0"
Minimum="0"
Maximum="200"
Value="{Binding Path=DataContext.Locations, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
但这给了我这个错误:
System.Windows.Data 错误:5:BindingExpression 生成的值为 对目标属性无效。;值='' BindingExpression:Path=DataContext.Locations;DataItem='DataGrid' (名称='');目标元素是"进度条"(名称=");目标属性 为"值"(类型"双精度")
但是我看不到像其他列那样的值。因为它是数据绑定到网格的。
TemplateBinding 只能在 ControlTemplate 中使用,您是在 DataTemplate 中使用它。(数据模板位于控件模板中这一事实并不重要)。
更改您的 xaml:
<ItemContainerTemplate >
<Grid>
<ProgressBar Grid.Row="0" Grid.Column="0" Minimum="0" Maximum="200" Value="{Binding CopyToLocationProgress ,Mode=OneWay}"/>
</Grid>
</ItemContainerTemplate>
一切都应该没问题。
我迟到了,但使用这样的东西。在模板列中,您需要使用单元格模板,然后使用项目容器模板。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<ItemContainerTemplate>
<Grid>
<ProgressBar></ProgressBar>
</Grid>
</ItemContainerTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>