如何从另一个“.cs”文件中获取DataGrid.SelectedIndex?(MVVM)

时间:2013-08-22 11:54:15

标签: wpf mvvm datagrid

之前当我想在DataGrid中编辑一行时,我只是将光标设置在DataGtid的行上,并在代码隐藏形式的方法中编写这样的代码(xxx.xaml.cs):

int k = XXXDataGrid.SelectedIndex;

然后我可以从DataGrid的一行中检索数据。   现在我尝试使用WPF的MVVM模式,我已经读过所有我的CRUD操作都应该在模型中编写。好的。我试图采用“DataGrid.SelectedIndex”,但如果没有在codebehind文件中创建处理程序,则无法实现。

我想知道如何从位于MVVM“Models”中的其他类中获取“DataGrid.SelectedIndex”和DataGrid行的数据。

值类型何时存储在堆栈中?  我已经阅读了很多关于C#的书籍,并且在我阅读有关值和引用类型时总是会出现一个问题:值类型何时存储在堆栈中?程序员无法从类中初始化任何值类型。

1 个答案:

答案 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有几个很好的教程等等。