2013-08-22 42 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

相关问题