IT

항목이 업데이트될 때 데이터 그리드가 업데이트되지 않는 이유소스가 변경되었습니까?

itgroup 2023. 4. 28. 20:28
반응형

항목이 업데이트될 때 데이터 그리드가 업데이트되지 않는 이유소스가 변경되었습니까?

제 wpf 애플리케이션에 데이터 그리드가 있는데 간단한 문제가 있습니다.일반 목록이 있으며 개체가 컬렉션에 추가될 때마다 이 컬렉션을 데이터 그리드 데이터 원본에 바인딩하려고 합니다.그리고 저는 관찰 가능한 수집품을 사용하는 것에 관심이 없습니다.

요점은 저는 다른 곳에서 같은 방법을 사용하고 있고 그것은 잘 작동한다는 것입니다. 하지만 이번에 추가 버튼을 누르면 개체가 추가되고 데이터 그리드가 올바르게 업데이트되지만 수집 데이터 그리드에 추가된 두 번째 항목에서는 더 이상 업데이트되지 않습니다.

코드는 다음과 같습니다.

 private void btnAddItem_Click(object sender, RoutedEventArgs e)
    {
        OrderDetailObjects.Add(new OrderDetailObject
        {
            Price = currentitem.Price.Value,
            Quantity = int.Parse(txtQuantity.Text),
            Title = currentitem.DisplayName,
            TotalPrice = currentitem.Price.Value * int.Parse(txtQuantity.Text)
        });

        dgOrderDetail.ItemsSource = OrderDetailObjects;
        dgOrderDetail.UpdateLayout();
    }

감 잡히는 게 없어요?

ItemsSource항상 동일하며, 컬렉션에 대한 참조, 변경 또는 업데이트가 없습니다.다음 전에 이를 무효화할 수 있습니다.

dgOrderDetail.ItemsSource = null;
dgOrderDetail.ItemsSource = OrderDetailObjects;

또는 항목을 새로 고칠 수도 있습니다.

dgOrderDetail.ItemsSource = OrderDetailObjects; //Preferably do this somewhere else, not in the add method.
dgOrderDetail.Items.Refresh();

당신이 실제로 전화하고 싶어하는 것 같지는 않습니다.UpdateLayout저기...

(관찰 가능한 컬렉션 사용을 거부하는 것은 좋은 생각이 아닙니다.)

나는 또한 단지 하는 것이

dgOrderDetails.Items.Refresh();

또한 동일한 동작을 수행할 수 있습니다.

예를 들어 람다를 사용하여 ItemSource를 필터링된 목록에 바인딩하면 업데이트되지 않습니다.I CollectionView를 사용하여 이 문제를 해결합니다(Comment not work):

//WindowMain.tvTemplateSolutions.ItemsSource = this.Context.Solutions.Local.Where(obj=>obj.IsTemplate); // templates
ICollectionView viewTemplateSolution = CollectionViewSource.GetDefaultView(this.Context.Solutions.Local);
viewTemplateSolution.SortDescriptions.Clear();
viewTemplateSolution.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
viewTemplateSolution.Filter = obj =>
{
   Solution solution = (Solution) obj;
   return solution.IsTemplate;
};
WindowMain.tvTemplateSolutions.ItemsSource = viewTemplateSolution;

관찰 가능한 컬렉션을 항목 컬렉션으로 사용하고 뷰 모델에서 콜 컬렉션 뷰보다 사용합니다.Source.GetDefaultView(my_collection)입니다.새로 고침();

언급URL : https://stackoverflow.com/questions/7059070/why-does-the-datagrid-not-update-when-the-itemssource-is-changed

반응형