2013-10-14 47 views
2

我試着去一個進度條增加一列,像這樣進度DataGrid中

<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 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')

,但我看不到像其他列的值。因爲它是綁定到網格的數據綁定。

+0

請向我們展示您如何以及在哪裏聲明瞭您的'OrderCounts'屬性。 – Sheridan

+0

@Sheridan我已添加缺少的代碼並將OrderCount更正爲正確的位置,該位置是位於ILocation界面中的copyToLocationProgress – mortenstarck

+0

@mortenstarck您能向我們展示ILocation實現嗎? – HichemSeeSharp

回答

1

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> 

,一切都應該沒問題。

+0

它只是抱怨無法解析。 – mortenstarck

0

我遲到了,但使用這樣的東西。在模板列中,您需要使用單元格模板,然後使用項目容器模板。

<DataGridTemplateColumn> 
         <DataGridTemplateColumn.CellTemplate> 
         <ItemContainerTemplate> 

          <Grid> 
           <ProgressBar></ProgressBar> 
          </Grid> 
         </ItemContainerTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn>