2012-04-12 64 views
5

Tôi muốn mang một hàng lưới dữ liệu của mình vào chế độ xem theo chương trình. Tôi có hơn 100 hàng. Khi tôi tạo một hàng (mà tôi đang thực hiện bằng cách thêm một mục vào bộ sưu tập có thể quan sát được), tôi muốn hàng mới đó được chọn và đưa nó vào chế độ xem. Tôi đã có thể chọn hàng mới trong mã của mình nhưng không thể cuộn được. Hơn nữa, tôi muốn ô đầu tiên của hàng ở chế độ chỉnh sửa để người dùng có thể nhập văn bản. Tôi đang theo mẫu MVVM cho ứng dụng và muốn giữ mã không ở chế độ xem của tôi. Làm thế nào tôi có thể đạt được điều này?Lập trình đưa hàng Datagrid vào xem trong WPF, MVVM

Bất kỳ sự giúp đỡ hoặc gợi ý sẽ được đánh giá cao ....

Cập nhật:

Đây là những gì tôi đã làm trong XAML của tôi

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

trong mô hình quan điểm của tôi, tôi đã làm

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

Nó không hoạt động đối với tôi.

Trả lời

2

Khi theo mẫu MVVM, bạn không nên thực hiện công cụ giao diện người dùng cụ thể như cuộn từ mã.

Giải pháp sẽ đơn giản - chỉ cần liên kết DataGrid.SelectedItem với thuộc tính trong ViewModel và khi thêm mục mới trong bộ sưu tập mục, hãy cập nhật thuộc tính được gắn với SelectedItem để tham chiếu đến mục và lưới dữ liệu được thêm vào. tự động.

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

Cảm ơn bạn đã nhiều vì đã tìm kiếm. Tôi đã làm những gì bạn đề nghị. Nhưng không may mắn. Tôi đã thêm mã của tôi trong phần cập nhật. xin vui lòng cho tôi biết nếu tôi đang thiếu một cái gì đó. tôi đã nhận được hàng đã chọn nhưng tôi phải làm gì để lấy dữ liệu để cuộn xuống hàng dưới cùng ...? – IamaC

+0

Tôi đã thử, nhưng nó không di chuyển đến hàng 'SelectedItem'. Tôi đã cố gắng để thay đổi 'SelectedItem' từ viewModel, tuy nhiên' DataGrid' không di chuyển đến hàng 'SelectedItem'. – StepUp

5

Đối với WPF thường xuyên DataGrid bạn có thể sử dụng ScrollIntoView. Trong chế độ xem của bạn, hãy hookup sự kiện SelectionChanged vào sự kiện sau trong tệp cs của bạn.

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); 
    } 
} 
Các vấn đề liên quan