c# - DataGrid 中的进度条

标签 c# wpf

我正在尝试向列中添加进度条,如下所示

<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; }
    }

这是在 ViewModel 中

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 Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='' BindingExpression:Path=DataContext.Locations; DataItem='DataGrid' (Name=''); target element is 'ProgressBar' (Name=''); target property is 'Value' (type 'Double')

但我看不到其他列上的值。因为它是数据绑定(bind)到网格的。

最佳答案

TemplateBinding 只能在 ControlTemplate 中使用,您在 DataTemplate 中使用它。 (DataTemplate 位于 ControlTemplate 内这一事实并不重要)。

更改您的 xaml:

   <ItemContainerTemplate >
      <Grid>
         <ProgressBar Grid.Row="0" Grid.Column="0"  Minimum="0" Maximum="200" Value="{Binding CopyToLocationProgress ,Mode=OneWay}"/>
      </Grid>
   </ItemContainerTemplate>

一切都应该没问题。

关于c# - DataGrid 中的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19360667/

相关文章:

c# - WPF 使用异步方法更新 ListBox 中的项目源

c# - WPF带阴影VS2012样式的无边框窗口

c# - 如何结合RegularExpressionValidator控件和RequiredFieldValidator?

c# - 在 C# 中写入 XML 时阻止 CDATA 标记被输出转义

c# - 如何简化这些重复的代码?

c# - 从异步函数返回的 IEnumerable<T> 创建 List<T>

c# - 如何获取 HttpResponse 大小

c# - 如何绑定(bind)自定义依赖属性来控制 View 模型?

c# - 让报表查看器填充网格?

wpf - 将 GridViewColumn 中的复选框居中?