C # DynamicData / ReactiveUI-캐시에 항목을 추가 할 때 예기치 않은 명확한 변경

알렉스

Edit 메서드를 사용하여 SourceCache를 여러 번 업데이트하고 있습니다. 그러나 결과 컬렉션의 변경 사항을 관찰하면 업데이트가 한 번에 하나씩 반환됩니다. 또한 업데이트 임계 값 제한 25에 도달하면 전체 목록이 지워지고 업데이트됩니다. 컬렉션의 항목은 유효하지만 변경 사항에 따른 UI 애니메이션은 이상적이지 않습니다. 특히 전체 컬렉션을 정리하고 다시 작성하는 경우. 다음 스 니펫은 문제를 재현합니다.

샘플 스 니펫 :

    public class DynamicDataTest
    {
        private readonly SourceCache<string, string> _sourceCache = new SourceCache<string, string>(x => x);
        private readonly ReadOnlyObservableCollection<string> _collection;

        public DynamicDataTest()
        {
            _sourceCache.Connect()
                //.Sort(SortExpressionComparer<string>.Ascending(l => l))
                .Bind(out _collection)
                .Subscribe();

            new SourceList<string>(_collection.ToObservableChangeSet())
                .Connect()
                .ForEachChange(change => Console.WriteLine(change.Reason.ToString()))
                .Subscribe();

            _sourceCache.AddOrUpdate("start");
            _sourceCache.Edit(source =>
            {
                for (int i = 0; i < 26; i++)
                {
                    source.AddOrUpdate(i.ToString());
                }
            });
        }
    }

다음과 같이 출력 될 것으로 예상합니다.

Add or AddRange
AddRange

대신 다음과 같은 결과가 발생합니다.

AddRange
Clear
AddRange
롤랜드 꿩

이것은 의도 된 동작입니다.

관찰 가능한 컬렉션에 바인딩 할 때 균형을 이룰 수 있습니다. 적용 할 변경 사항이 많은 경우 일반적으로 재설정 알림을 보내는 것이 한 번에 하나씩 변경 사항을 적용하는 것보다 빠릅니다. 재설정은 알림 ​​모음 변경 이벤트를 일시 중단 한 다음 목록을 지우고 다시로드합니다. 그 후 재설정이 시작됩니다. 이것이 추가 지우기 / 추가 범위가 표시되는 이유입니다.

이는 바인드 연산자의 임계 값 재설정 옵션으로 제어됩니다. 예를 들면

.Bind(out _collection, resetThreshold:100) //default=25

100 개의 변경 사항을 적용하면 재설정을 시작하지만

 .Bind(out _collection, resetThreshold:int.MaxValue)

재설정이 사용되지 않도록합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

목록을 스크롤 할 때보기가 예기치 않게 변경됨

분류에서Dev

C : sizeof () 내에서 배열을 캐스팅 할 때 예기치 않은 결과

분류에서Dev

함수 목록을 변경할 때 예기치 않은 결과 (람다)

분류에서Dev

InputMethodService에서 텍스트 추출을 시작할 때 예기치 않은 null

분류에서Dev

각도 재질에 새 항목을 추가 할 때 layout = "row"의 높이가 변경되지 않습니다.

분류에서Dev

Swift-배열에 항목을 추가 할 때 Optional 값을 언 래핑하는 동안 예기치 않게 nil이 발견되었습니다.

분류에서Dev

모델 레이어의 속성을 변경할 때 애니메이션에서 예기치 않은 동작

분류에서Dev

AspNetCore 3에서 예기치 않은 "SizeLimit가 설정된 경우 캐시 항목에서 크기 값을 지정해야합니다."메시지

분류에서Dev

구문 분석 오류 : 반응에서 조건을 추가 할 때 예기치 않은 토큰

분류에서Dev

.map을 사용하여 배열에 개체를 추가 할 때 예기치 않은 토큰 {

분류에서Dev

csh의 파일에서 정확한 단어를 검색 할 때 예기치 않은 출력을 제공하는 grep 명령

분류에서Dev

모델 속성에 추가 할 때 Fuelphp ORM 예기치 않은 결과

분류에서Dev

Terraform은 AWS 공급자 리전을 변경할 때 예기치 않은 변경을 감지합니다.

분류에서Dev

Android-치명적 예외 : 하위 목록을 추가 할 때 기본

분류에서Dev

Objective-C에서 곱할 때 예기치 않은 동작

분류에서Dev

ReactiveUI 및 DynamicData를 사용하여 변경 가능한 모델의 ObservableCollection <T>를 viewmodel의 ReadOnlyObservableCollection <T>에 바인딩하는 방법

분류에서Dev

가변 개수의 인수가있는 C 함수는 더 적은 개수의 인수로 호출 할 때 예기치 않은 출력을 반환합니다.

분류에서Dev

중괄호를 사용하여 C ++에서 변수를 초기화 할 때 예기치 않은 결과

분류에서Dev

클릭 할 때 recyclerview 항목 및 하위 항목을 변경하고 조각에서 클릭 한 위치의 데이터를 가져 오는 방법은 무엇입니까?

분류에서Dev

Angular 2에서 Ajax 요청을 시도 할 때 예기치 않은 토큰 오류가 발생합니다.

분류에서Dev

목록을 삭제할 때 Python 예기치 않은 (나에게) 동작

분류에서Dev

속성 기본값을 통해 관계를 변경하려고 할 때 예기치 않은 InvalidOperationException

분류에서Dev

조건부 변수 (c, gcc)를 사용할 때 예기치 않은 동작

분류에서Dev

Python에서 OpenCV 다시 매핑을 사용할 때 예기치 않은 동작

분류에서Dev

if () 블록에 여러 변수를 할당 할 때 예기치 않은 동작

분류에서Dev

'char'변수를 사용할 때 예기치 않은 출력을 발생시키는 While () 루프

분류에서Dev

Internet Explorer를 시작할 때 예기치 않은 오류가 발생했습니다. IELaunchURL ()이 800700C1을 반환했습니다.

분류에서Dev

PropertyGrid-> BindingList-> 목록에 항목을 추가 할 때 이상한 동작

분류에서Dev

Python은 기본 키로 중복 항목을 추가하려고 할 때 MySQL IntegrityError를 무시합니다.

Related 관련 기사

  1. 1

    목록을 스크롤 할 때보기가 예기치 않게 변경됨

  2. 2

    C : sizeof () 내에서 배열을 캐스팅 할 때 예기치 않은 결과

  3. 3

    함수 목록을 변경할 때 예기치 않은 결과 (람다)

  4. 4

    InputMethodService에서 텍스트 추출을 시작할 때 예기치 않은 null

  5. 5

    각도 재질에 새 항목을 추가 할 때 layout = "row"의 높이가 변경되지 않습니다.

  6. 6

    Swift-배열에 항목을 추가 할 때 Optional 값을 언 래핑하는 동안 예기치 않게 nil이 발견되었습니다.

  7. 7

    모델 레이어의 속성을 변경할 때 애니메이션에서 예기치 않은 동작

  8. 8

    AspNetCore 3에서 예기치 않은 "SizeLimit가 설정된 경우 캐시 항목에서 크기 값을 지정해야합니다."메시지

  9. 9

    구문 분석 오류 : 반응에서 조건을 추가 할 때 예기치 않은 토큰

  10. 10

    .map을 사용하여 배열에 개체를 추가 할 때 예기치 않은 토큰 {

  11. 11

    csh의 파일에서 정확한 단어를 검색 할 때 예기치 않은 출력을 제공하는 grep 명령

  12. 12

    모델 속성에 추가 할 때 Fuelphp ORM 예기치 않은 결과

  13. 13

    Terraform은 AWS 공급자 리전을 변경할 때 예기치 않은 변경을 감지합니다.

  14. 14

    Android-치명적 예외 : 하위 목록을 추가 할 때 기본

  15. 15

    Objective-C에서 곱할 때 예기치 않은 동작

  16. 16

    ReactiveUI 및 DynamicData를 사용하여 변경 가능한 모델의 ObservableCollection <T>를 viewmodel의 ReadOnlyObservableCollection <T>에 바인딩하는 방법

  17. 17

    가변 개수의 인수가있는 C 함수는 더 적은 개수의 인수로 호출 할 때 예기치 않은 출력을 반환합니다.

  18. 18

    중괄호를 사용하여 C ++에서 변수를 초기화 할 때 예기치 않은 결과

  19. 19

    클릭 할 때 recyclerview 항목 및 하위 항목을 변경하고 조각에서 클릭 한 위치의 데이터를 가져 오는 방법은 무엇입니까?

  20. 20

    Angular 2에서 Ajax 요청을 시도 할 때 예기치 않은 토큰 오류가 발생합니다.

  21. 21

    목록을 삭제할 때 Python 예기치 않은 (나에게) 동작

  22. 22

    속성 기본값을 통해 관계를 변경하려고 할 때 예기치 않은 InvalidOperationException

  23. 23

    조건부 변수 (c, gcc)를 사용할 때 예기치 않은 동작

  24. 24

    Python에서 OpenCV 다시 매핑을 사용할 때 예기치 않은 동작

  25. 25

    if () 블록에 여러 변수를 할당 할 때 예기치 않은 동작

  26. 26

    'char'변수를 사용할 때 예기치 않은 출력을 발생시키는 While () 루프

  27. 27

    Internet Explorer를 시작할 때 예기치 않은 오류가 발생했습니다. IELaunchURL ()이 800700C1을 반환했습니다.

  28. 28

    PropertyGrid-> BindingList-> 목록에 항목을 추가 할 때 이상한 동작

  29. 29

    Python은 기본 키로 중복 항목을 추가하려고 할 때 MySQL IntegrityError를 무시합니다.

뜨겁다태그

보관