2012-04-12 32 views
5

'da bir Datagrid sırasını program görünümünde görüntülemek için programlı olarak veri ızgaramın bir satırını getirmek istiyorum. 100'den fazla satırım var. Bir satır oluşturduğumda (gözlemlenebilir bir koleksiyona bir öğe ekleyerek yapıyorum) bu yeni satırın seçilmesini ve bunu görüntülemesini istiyorum. Kodumdaki yeni satırı seçebildim ancak kaydırma yapamadım. Daha fazla üzerinde satırın ilk hücresinin düzenleme modunda olmasını istiyorum, böylece kullanıcı metin girebilir. Uygulama için MVVM desenini takip ediyorum ve görünümlerimde sıfır kodu tutmak istiyorum. Bunu nasıl başarabilirim? WPF, MVVM

Herhangi bir yardım veya öneri takdir edilecektir

....

Güncelleme:

Ben bu

bunu kendi bakış modelinde

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

benim XAML yaptıklarını bu

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"); 
     } 
    } 

Benim için çalışmadı.

cevap

2

MVVM desenini izlediğinizde, bir koddan kaydırma gibi UI'ye özel bir şey yapmamalısınız.

Çözüm basit olurdu - sadece ViewModel bir mülke DataGrid.SelectedItem bağlamak ve ürün koleksiyonunda yeni bir öğe eklerken sadece uygun bir satırı seçin bu yüzden sadece eklenen öğe ve veri ızgarasına başvurmak SelectedItem bağlı bir özelliği güncelleştirmek otomatik olarak. Düzenli WPF DataGrid sen ScrollIntoView kullanabilirsiniz İçin

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

Baktığınız için çok teşekkür ederim. Önerdiğin şeyi yaptım. Ama henüz şans yok. Kodumu güncelleme bölümüne ekledim. bir şey eksik olursam lütfen bana bildirin. Seçilen satırı aldım ama alt sıraya kaydırmak için datagrid almalıyım ...? – IamaC

+0

Denedim, ancak 'SelectedItem' satırına kaydırma yapmıyor. ViewModel'den 'SelectedItem 'değiştirmeye çalıştım, ancak' DataGrid' 'SelectedItem' satırına ilerlemiyor. – StepUp

5

. Görünümünüzde, viewChanged olayını, görünüm kodunuzun arkasındaki cs dosyasında aşağıdakilere bağlayabilirsiniz.

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