Привязка к списку <> - PullRequest
       42

Привязка к списку <>

0 голосов
/ 25 апреля 2010

У меня есть такая сетка данных:

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

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

Как я могу исправить эту проблему. Большое спасибо.

Ответы [ 3 ]

4 голосов
/ 25 апреля 2010

В вашей таблице данных вы должны указать, что данные изменяются при изменении свойства, а не покидать ячейку. Для этого вы добавляете 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>
1 голос
/ 26 апреля 2010

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

private class ProductDetail
{
    public TProduct Product { get; set ; } // TProduct is a class provied by a web service
    public int Quantity { get; set; }
}
1 голос
/ 25 апреля 2010

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

...