2012-04-12 1 views
5

데이터 그리드 행을 프로그래밍 방식으로 가져오고 싶습니다. 나는 100 줄 이상을 가지고있다. 관찰 가능한 컬렉션에 항목을 추가하여 행을 만들 때 해당 새 행을 선택하여 표시해야합니다. 내 코드에서 새 행을 선택할 수 있었지만 스크롤을 수행 할 수 없었습니다. 계속해서 행의 첫 번째 셀을 편집 모드로 설정하여 사용자가 텍스트를 입력 할 수있게하려고합니다. 응용 프로그램에 대한 MVVM 패턴을 따르고 있으며 내 견해에 제로 코드를 유지하려고합니다. 어떻게 이것을 얻을 수 있습니까? WPG, MVVM에서 Datagrid 행을 프로그래밍 방식으로 가져 오기

어떤 도움이나 제안을 이해할 수있을 것이다

....

업데이트 :

내가이

을했던 내보기 모델의

<telerik:RadGridView ItemsSource="{Binding AllPartClasses}" 
        SelectedItem="{Binding SelectedPartClassViewModel, Mode=TwoWay}"   
        SelectionMode="Single" IsSynchronizedWithCurrentItem="True"> 

내 XAML에서 한 일이

void AddNewPartClassExecute() 
    { 
     PartClass newPartClass = new PartClass(); 
     PartClassViewModel tempPartClass = new PartClassViewModel(newPartClass); 
     tempPartClass.IsInValid = true; 
     AllPartClasses.Add(tempPartClass); 
     SelectedPartClassViewModel = tempPartClass; 
     Global.DbContext.PartClasses.AddObject(newPartClass); 

     //OnPropertyChanged("AllPartClasses"); 
    } 
public PartClassViewModel SelectedPartClassViewModel 
    { 
     get 
     { 
      return _selectedPartClassViewModel; 
     } 
     set 
     { 
      _selectedPartClassViewModel = value; 
      OnPropertyChanged("SelectedPartClassViewModel"); 
     } 
    } 

나를 위해 작동하지 않았습니다.

답변

2

MVVM 패턴을 따르는 경우 코드에서 스크롤하는 것과 같은 UI 관련 작업을 수행해서는 안됩니다.

솔루션은 간단한 것 - 단지 뷰 모델의 속성에 DataGrid.SelectedItem을 결합하고, 아이템 수집에 새로운 항목을 추가 할 때 바로 적절한 행을 선택해야합니다 그래서 그냥 추가 된 항목과 데이터 그리드에 참조 할 것 SelectedItem에 바인딩 된 속성을 업데이트 자동으로 일반 WPF DataGrid 당신이 ScrollIntoView을 사용할 수 있습니다에 대한

<DataGrid 
    ItemsSource="{Binding UnderyingItemsCollection}" 
    SelectedItem="{Binding RecentlyAddedItem, Mode=TwoWay}" 
    IsSynchronizedWithCurrentItem="True"> 
+1

고맙습니다. 나는 네가 제안한 것을했다. 그러나 운은 아직 없다. 업데이트 섹션에 코드를 추가했습니다. 제가 뭔가를 놓치고 있다면 알려주세요. 내가 선택한 행을 얻었지만 무엇을해야합니까 아래쪽 행으로 스크롤하려면 DataGrid가 ...? – IamaC

+0

시도했지만'SelectedItem' 행으로 스크롤하지 않았습니다. viewModel에서'SelectedItem'을 변경하려했지만'DataGrid'가'SelectedItem' 행으로 스크롤하지 않았습니다. – StepUp

5

. 뷰 연결 코드에서 SelectionChanged 이벤트를 다음 코드 숨김 cs 파일에 연결하십시오.

private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    Selector selector = sender as Selector; 
    DataGrid dataGrid = selector as DataGrid; 
    if (dataGrid != null && selector.SelectedItem != null && dataGrid.SelectedIndex >= 0) 
    { 
     dataGrid.ScrollIntoView(selector.SelectedItem); 
    } 
} 
관련 문제