2013-08-22 71 views
1

之前,當我想要編輯DataGrid中的一行時,我只是將光標放在DataGtid的行上,並將這些代碼寫入方法代碼隱藏表單(xxx.xaml.cs):如何從另一個「.cs」文件中獲取DataGrid.SelectedIndex?(MVVM)

int k = XXXDataGrid.SelectedIndex; 

然後我可以從DataGrid的一行檢索數據。 現在我嘗試使用WPF的MVVM模式,並且我已經讀過所有我的CRUD操作應該寫在模型中。好的。我試圖採取「DataGrid.SelectedIndex」,但它不可能在代碼隱藏文件中創建一個處理程序。

我想知道如何從位於MVVM的「模型」中的其他類取得「DataGrid.SelectedIndex」和DataGrid的一行數據。

何時將值類型存儲在堆棧中? 我已經閱讀了很多C#的書籍,並且總是在閱讀關於值和引用類型時,我的腦海裏出現了一個問題:值類型何時存儲在堆棧中?導致程序員無法從類中初始化任何值類型。

回答

1

您的ViewModel將具有已填充模型對象的屬性。在這裏您將分配它們,以便View能夠顯示數據。

public ParentModel 
    { 
     get { return parentModel; } 
     private set 
     { 
      if (parentModel != value) 
      { 
       parentModel = value; 
       RaisePropertyChanged("ParentModel"); 
      } 
     } 
    } 


    public int SelectedItemIndex 
    { 
     get { return selectedItemIndex; } 
     set 
     { 
      if (selectedItemIndex != value) 
      { 
       selectedItemIndex = value; 
       RaisePropertyChanged("SelectedItemIndex"); 
      } 
     } 
    } 

的視圖將包含顯示數據的對象,無論是DataGrid中,組合框等,您可以使用的ItemTemplate自定義數據是如何顯示的,但關鍵是你的數據bind的控制。這可以允許數據在只有ViewModel的方向模式下查看(OneWay)或View to ViewModel(OneWayToSource)或兩者(TwoWay)。因此,當用戶更改選定的索引時,數據將返回到ViewModel,因爲它爲以下的TwoWay設置。這裏的ItemsSource被設置爲OneWay,所以只有ViewModel可以改變View。

<DataGrid ItemsSource="{Binding Path=ParentModel.Items, Mode=OneWay}" 
       SelectedIndex="{Binding Path=SelectedItemIndex, Mode=TwoWay}" /> 

如果ViewModels需要與BusinessLogic交互,只需傳遞數據。如果一個獨立的ViewModel需要這些信息,則需要使用框架中可用的概念,例如。 EventAggregator(Prism)可以傳遞數據,因爲它們不會彼此瞭解。


MVVM的核心概念是模型和WPF控件屬性的綁定。我想你會想更多地閱讀它來充分利用功率和設計。一些非常有用的問題/答案可以在StackOverflow上找到,MSDN有幾個很好的教程等。

+0

請與我分享好的教程鏈接。我發現了很多文章,但是我找不到綁定到Datagrid的教程 – StepUp

+0

@StepUp [This](http://karlshifflett.wordpress.com/2010/11/07/in-the-box-ndash-mvvm-培訓/)是一個非常全面的開始,你可以遵循,當你有問題時,你將利用SO/MSDN來了解更多關於細節的信息。 – bland

相關問題