之前当我想在DataGrid中编辑一行时,我只是将光标设置在DataGtid的行上,并在代码隐藏形式的方法中编写这样的代码(xxx.xaml.cs):
int k = XXXDataGrid.SelectedIndex;
然后我可以从DataGrid的一行中检索数据。 现在我尝试使用WPF的MVVM模式,我已经读过所有我的CRUD操作都应该在模型中编写。好的。我试图采用“DataGrid.SelectedIndex”,但如果没有在codebehind文件中创建处理程序,则无法实现。
我想知道如何从位于MVVM“Models”中的其他类中获取“DataGrid.SelectedIndex”和DataGrid行的数据。
值类型何时存储在堆栈中? 我已经阅读了很多关于C#的书籍,并且在我阅读有关值和引用类型时总是会出现一个问题:值类型何时存储在堆栈中?程序员无法从类中初始化任何值类型。
答案 0 :(得分: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");
}
}
}
View将包含显示数据的对象,无论是DataGrid,ComboBox等。您可以使用ItemTemplates自定义数据的显示方式,但关键是要将bind
数据发送给控件。这可以允许数据以仅ViewModel的方向模式流向View(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}" />
如果ViewModel需要与BusinessLogic交互,只需传递数据即可。如果单独的ViewModel需要这些信息,您需要使用框架中可用的概念,例如。 EventAggregator(Prism),传递数据,因为他们不会彼此了解。
MVVM的核心概念是模型和WPF控件的属性绑定。我想你会想要阅读更多内容以充分利用电源和设计。一些非常有用的问题/答案可以在StackOverflow上找到,MSDN有几个很好的教程等等。