MVVM의 ViewModel에서 데이터 그리드의 행을 선택하는 방법은 무엇입니까?

샤힌 울버린

나는 데이터 그리드에서 사용자 입력을 확인하려고하는데, 내가하는 방식은 다음과 같습니다.

I) 사용자가 행을 추가하도록 허용

II) 사용자가 일부 셀을 채울 수 있도록 허용

III) EndEdit () 이벤트가 발생하면 모델을 업데이트합니다.

IV) Model을 업데이트 할 수없는 경우 (예 : 사용자가 NotNull 값을 제공하지 않은 경우) 오류가 발생합니다.

V) 여기에 이상한 부분이 있습니다! DataGrid의 잘못된 행에 머물고 싶지만 SelectedIndex 및 SelectedValue를 올바르게 설정 했음에도 불구하고 강조 표시된 행이 변경됩니다.

내 XAML은 다음과 같습니다.

<DataGrid x:Name="gd_Contacts" SelectedItem="{Binding SelectedContact,Converter={StaticResource NewPlaceConverter}}" 
              SelectedIndex="{Binding SelectedItemIndex}"
              Margin="0,5,1,0" ItemsSource="{Binding ContactCollection, Mode=TwoWay}" 
              CanUserAddRows="True" CanUserDeleteRows="False" AutoGenerateColumns="False" Grid.Column="1">

내 ViewModel은 다음과 같습니다.

private ObservableCollection<ActionEnabledContacts> FContactCollection;
//....
public ActionEnabledContacts SelectedContact //THE PROPERTY FOR SELECTEDITEM
    {
        get { return FSelectedContact; }
        set 
        { 
            //
            List <ActionEnabledContacts> InvalidList=ContactCollection.Where<ActionEnabledContacts>(p => p.cnt_Key == 0).ToList();
            if (InvalidList != null && InvalidList.Count > 0)
            {
                //now find index of that bastard
                List<ActionEnabledContacts> AllContacts = ContactCollection.ToList();
                int BastardIndex = 0;
                foreach (ActionEnabledContacts AContact in AllContacts)
                {
                    if (AContact.cnt_Key == 0)
                    {
                        FSelectedContact = InvalidList[0];
                        NotifyPropertyChanged();
                        SelectedItemIndex = BastardIndex;
                        //^^^^ THIS LINE DO UPDATE SELECTEDINDEX AND CALL NotifyPropertyChanged()
                    }
                    BastardIndex++;
                }
            }
            else
            {
                //
                FSelectedContact = value;
                NotifyPropertyChanged();
            }
        }
    }
알 무로

선택이 변경되는 동안에는 선택을 변경할 수 없습니다 ... 그게 이해가된다면 : P

선택 사항이 방금 변경된 경우 다시 프로그래밍 방식으로 변경할 수있을 때까지 기다려야합니다. 이것은 일반적으로 Dispatcher.BeginInvokeDispatcher 대기열에 호출을 추가 하는 사용 되므로 현재 선택이 처리 된 후에 실행됩니다.

if (AContact.cnt_Key == 0)
{
    FSelectedContact = InvalidList[0];
    NotifyPropertyChanged();

    Application.Current.Dispatcher.BeginInvoke(new Action(() =>
        SelectedItemIndex = BastardIndex));
}
BastardIndex++;

MVVM 또는 여러 UI 스레드 시나리오에서 뷰 모델에서이 작업을 수행하는 것이 정확히 최상의 솔루션은 아닙니다. 해당 줄에서 이벤트를 발생시키고 (내부 인덱스 전달 EventArgs)보기에서 해당 이벤트를 구독하고 이벤트 처리기에서 Dispatcher 호출을 실행 ( this.Dispatcher대신 사용 Application.Current.Dispatcher) 할 수 있습니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

데이터 프레임에서 특정 수의 행을 선택하는 방법은 무엇입니까?

분류에서Dev

마스터 세부 정보 KendoUI 그리드의 모든 세부 정보 그리드에서 하나의 행만 선택하는 방법은 무엇입니까?

분류에서Dev

mvvm을 사용하여 목록 상자 wpf에서 선택한 항목의 데이터를 표시하는 방법은 무엇입니까?

분류에서Dev

R의 시간별 데이터에서 매일 한 시간을 선택하는 방법은 무엇입니까?

분류에서Dev

SQL에서 선택의 각 행에 대해 데이터베이스에 행을 삽입하는 방법은 무엇입니까?

분류에서Dev

SQL에서 선택의 각 행에 대해 데이터베이스에 행을 삽입하는 방법은 무엇입니까?

분류에서Dev

한 행의 테이블에서 2 행을 선택하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

주어진 데이터가 테이블에서 둘 이상의 행에 나타나는 행을 선택하는 방법은 무엇입니까?

분류에서Dev

Javascript의 데이터 목록에서 선택한 데이터의 값을 얻는 방법은 무엇입니까?

분류에서Dev

MATLAB에서 큰 데이터 세트에 대해 2 개의 행을 선택하고 3 개의 행을 건너 뛰는 방법은 무엇입니까?

분류에서Dev

Android에서 MVVM 데이터 바인딩을 사용하여 양식 ViewModel의 유효성을 검사하는 방법은 무엇입니까?

분류에서Dev

각 행의 유효성을 검사 한 후 UltraGrid 및 데이터베이스에서 선택한 행을 삭제하는 방법은 무엇입니까?

분류에서Dev

MySQL SELECT에서 선택한 행에 데이터베이스에없는 임의의 값을 추가하는 방법은 무엇입니까?

분류에서Dev

나머지 데이터 세트에서 행을 선택하고 Python의 초기 행렬에 추가하는 방법은 무엇입니까?

분류에서Dev

값을 데이터 프레임의 열에 선택적으로 매핑하는 방법은 무엇입니까?

분류에서Dev

내 선택 상자의 각 옵션에 데이터 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

MySQL의 테이블에서 양방향 매핑 된 행을 선택하는 방법은 무엇입니까?

분류에서Dev

R에서 데이터 세트의 특정 행을 선택하여 함수에서 사용하는 방법은 무엇입니까?

분류에서Dev

파이썬에서 이전 행의 값을 조건부로 선택하는 방법은 무엇입니까?

분류에서Dev

선택한 두 행 사이에 데이터 세트의 레코드에 플래그를 지정하는 방법은 무엇입니까?

분류에서Dev

데이터베이스의 데이터로 드롭 다운 목록에서 기본 선택 및 값을 설정하는 방법은 무엇입니까?

분류에서Dev

이전 열의 데이터 증가율로 새 열을 표시하는 테이블에서 데이터를 선택하는 방법은 무엇입니까?

분류에서Dev

react-virtuaized 테이블에서 행의 확인란을 선택하는 방법은 무엇입니까?

분류에서Dev

캐럿 그리드 검색에서 최상의 ntree 값을 선택하는 방법은 무엇입니까?

분류에서Dev

Tkinter의 선택한 행에서 데이터를 얻는 방법은 무엇입니까?

분류에서Dev

하나의 결과 행에서 단일 테이블의 여러 행에서 데이터를 선택하는 방법은 무엇입니까?

분류에서Dev

하나의 열에서 다른 카테고리 데이터를 선택하는 방법은 무엇입니까?

분류에서Dev

특정 이름의 행을 선택하는 방법은 무엇입니까?

분류에서Dev

데이터베이스에서 행의 하위 집합을 임의로 선택하는 SQL 쿼리의 복잡성은 무엇입니까?

Related 관련 기사

  1. 1

    데이터 프레임에서 특정 수의 행을 선택하는 방법은 무엇입니까?

  2. 2

    마스터 세부 정보 KendoUI 그리드의 모든 세부 정보 그리드에서 하나의 행만 선택하는 방법은 무엇입니까?

  3. 3

    mvvm을 사용하여 목록 상자 wpf에서 선택한 항목의 데이터를 표시하는 방법은 무엇입니까?

  4. 4

    R의 시간별 데이터에서 매일 한 시간을 선택하는 방법은 무엇입니까?

  5. 5

    SQL에서 선택의 각 행에 대해 데이터베이스에 행을 삽입하는 방법은 무엇입니까?

  6. 6

    SQL에서 선택의 각 행에 대해 데이터베이스에 행을 삽입하는 방법은 무엇입니까?

  7. 7

    한 행의 테이블에서 2 행을 선택하는 가장 좋은 방법은 무엇입니까?

  8. 8

    주어진 데이터가 테이블에서 둘 이상의 행에 나타나는 행을 선택하는 방법은 무엇입니까?

  9. 9

    Javascript의 데이터 목록에서 선택한 데이터의 값을 얻는 방법은 무엇입니까?

  10. 10

    MATLAB에서 큰 데이터 세트에 대해 2 개의 행을 선택하고 3 개의 행을 건너 뛰는 방법은 무엇입니까?

  11. 11

    Android에서 MVVM 데이터 바인딩을 사용하여 양식 ViewModel의 유효성을 검사하는 방법은 무엇입니까?

  12. 12

    각 행의 유효성을 검사 한 후 UltraGrid 및 데이터베이스에서 선택한 행을 삭제하는 방법은 무엇입니까?

  13. 13

    MySQL SELECT에서 선택한 행에 데이터베이스에없는 임의의 값을 추가하는 방법은 무엇입니까?

  14. 14

    나머지 데이터 세트에서 행을 선택하고 Python의 초기 행렬에 추가하는 방법은 무엇입니까?

  15. 15

    값을 데이터 프레임의 열에 선택적으로 매핑하는 방법은 무엇입니까?

  16. 16

    내 선택 상자의 각 옵션에 데이터 속성을 추가하는 방법은 무엇입니까?

  17. 17

    MySQL의 테이블에서 양방향 매핑 된 행을 선택하는 방법은 무엇입니까?

  18. 18

    R에서 데이터 세트의 특정 행을 선택하여 함수에서 사용하는 방법은 무엇입니까?

  19. 19

    파이썬에서 이전 행의 값을 조건부로 선택하는 방법은 무엇입니까?

  20. 20

    선택한 두 행 사이에 데이터 세트의 레코드에 플래그를 지정하는 방법은 무엇입니까?

  21. 21

    데이터베이스의 데이터로 드롭 다운 목록에서 기본 선택 및 값을 설정하는 방법은 무엇입니까?

  22. 22

    이전 열의 데이터 증가율로 새 열을 표시하는 테이블에서 데이터를 선택하는 방법은 무엇입니까?

  23. 23

    react-virtuaized 테이블에서 행의 확인란을 선택하는 방법은 무엇입니까?

  24. 24

    캐럿 그리드 검색에서 최상의 ntree 값을 선택하는 방법은 무엇입니까?

  25. 25

    Tkinter의 선택한 행에서 데이터를 얻는 방법은 무엇입니까?

  26. 26

    하나의 결과 행에서 단일 테이블의 여러 행에서 데이터를 선택하는 방법은 무엇입니까?

  27. 27

    하나의 열에서 다른 카테고리 데이터를 선택하는 방법은 무엇입니까?

  28. 28

    특정 이름의 행을 선택하는 방법은 무엇입니까?

  29. 29

    데이터베이스에서 행의 하위 집합을 임의로 선택하는 SQL 쿼리의 복잡성은 무엇입니까?

뜨겁다태그

보관