2010-04-25 4 views
0

У меня есть DataGrid, как это:Привязка к List <>

<dg:DataGrid Name="dg" AutoGenerateColumns="False" CanUserDeleteRows="True"> 
        <dg:DataGrid.Columns> 
         <dg:DataGridTextColumn Header="Product Code" x:Name="columnProductCode" Binding="{Binding Path=Product.ProductCode}" IsReadOnly="True" ></dg:DataGridTextColumn> 
         <dg:DataGridTextColumn Header="Product Name" x:Name="columnProductName" Binding="{Binding Path=Product.Name}" IsReadOnly="True" ></dg:DataGridTextColumn> 
         <dg:DataGridTextColumn Header="ProductMeasure" x:Name="columnDonViTinh" Binding="{Binding Path=Product.Measure IsReadOnly="True"></dg:DataGridTextColumn> 
         <dg:DataGridTextColumn Header="Quantity" x:Name="ColumnQuantity" Binding="{Binding Path=Quantity IsReadOnly="False"></dg:DataGridTextColumn> 
        </dg:DataGrid.Columns> 
</dg:DataGrid> 

В коде позади, у меня-структуру, как это:

private struct ProductDetail 
     { 

      public TProduct Product { get; set ; } // TProduct is a class provied by a web service 
      public int Quantity { get; set; } 
     } 

и список, как это:

 private IList<ProductDetail> bs = new List<ProductDetail>(); 

Я пытался заполнить данные до «bs». И привязка вот так:

this.dg.ItemsSource = this.bs; 

Все в порядке. Я могу вставить новую строку, удалить строку, но когда я попытаюсь изменить колонку «Количество», нажмите на заголовок datagrid (чтобы прибегнуть) -> изменить значение столбца «Количество».

Как исправить эту проблему. Спасибо заранее.

ответ

1

КИ, я пытаюсь определить класс (с TProduct и количеством атрибутов также) вместо текущей структуры. И .. это работает =. =

private class ProductDetail 
{ 
    public TProduct Product { get; set ; } // TProduct is a class provied by a web service 
    public int Quantity { get; set; } 
} 
1

Я не знаю полного API DataGrid, но я думаю, что вам нужно зафиксировать изменения, прежде чем они будут отброшены назад к базовому объекту. Looking at the docs Похоже, что редактирование не выполняется до тех пор, пока вы не смените ячейки или не нажмете enter. Если вы выполните сортировку перед выполнением любого из этих действий, редактирование может быть отменено.

+0

Спасибо Майк Браун и Брент. Я попробовал «UpdateSourceTrigger = PropertyChanged», но он не работает. – hanuman0503

4

На вашем datagrid вы должны указать, что данные изменяются при изменении свойства, а не покидают ячейку. Чтобы сделать это, вы добавите UpdateSourceTrigger=PropertyChanged к вашему привязке, а затем он должен работать. Ваш DataGrid теперь будет выглядеть следующим образом:

<dg:DataGrid Name="dg" AutoGenerateColumns="False" CanUserDeleteRows="True"> 
    <dg:DataGrid.Columns> 
     <dg:DataGridTextColumn Header="Product Code" 
      x:Name="columnProductCode" 
      Binding="{Binding Path=Product.ProductCode, UpdateSourceTrigger=PropertyChanged}" 
      IsReadOnly="True" > 
     </dg:DataGridTextColumn> 
     <dg:DataGridTextColumn Header="Product Name" 
      x:Name="columnProductName" 
      Binding="{Binding Path=Product.Name, UpdateSourceTrigger=PropertyChanged}" 
      IsReadOnly="True" > 
     </dg:DataGridTextColumn> 
     <dg:DataGridTextColumn Header="ProductMeasure" 
      x:Name="columnDonViTinh" 
      Binding="{Binding Path=Product.Measure, UpdateSourceTrigger=PropertyChanged}" 
      IsReadOnly="True"> 
     </dg:DataGridTextColumn> 
     <dg:DataGridTextColumn Header="Quantity" 
      x:Name="ColumnQuantity" 
      Binding="{Binding Path=Quantity, UpdateSourceTrigger=PropertyChanged}" 
      IsReadOnly="False"> 
     </dg:DataGridTextColumn> 
    </dg:DataGrid.Columns> 
</dg:DataGrid> 
+0

Спасибо Майку Брауну и Брент. Я попробовал «UpdateSourceTrigger = PropertyChanged», но он не работает. – hanuman0503

Смежные вопросы