2012-04-12 96 views
5

我想將一行數據網格以編程方式放入視圖中。我有超過100行。當我創建一個行(我正在通過將一個項目添加到可觀察集合中)時,我希望選擇新行並將其引入視圖。我能夠選擇我的代碼中的新行,但無法滾動。我想讓行的第一個單元格處於編輯模式,以便用戶可以輸入文本。我正在關注應用程序的MVVM模式,並希望在我的視圖中保留零代碼。我怎樣才能做到這一點?以編程方式將一個Datagrid行帶入WPF視圖中,MVVM

任何幫助或建議,可以理解....

更新:

這是我在我的XAML

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

我的視圖模型

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所以它會參考剛纔添加的項目和數據網格的屬性應該選擇一個適當的行自動。

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

非常感謝您的期待。我做了你的建議。但沒有運氣。我在更新部分添加了我的代碼。請讓我知道如果我失去了一些東西。我沒有得到選定的行,但我該怎麼做datagrid滾動到底部行...? – IamaC 2012-04-12 20:35:14

+0

我試過了,但它不是滾動到'SelectedItem'行。我試圖從viewModel中更改'SelectedItem',但是'DataGrid'沒有滾動到'SelectedItem'行。 – StepUp 2016-09-19 22:38:32

5

對於經常WPF DataGrid可以使用ScrollIntoView。在您的視圖中將SelectionChanged事件連接到視圖代碼隱藏文件中的以下內容。

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); 
    } 
} 
相關問題