Wpf 如何从其他";获取DataGrid.SelectedIndex;。政务司司长;文件?(MVVM)

Wpf 如何从其他";获取DataGrid.SelectedIndex;。政务司司长;文件?(MVVM),wpf,mvvm,datagrid,Wpf,Mvvm,Datagrid,早些时候,当我想编辑DataGrid中的一行时,我只是将光标设置在DataGtid的行上,并用codebehind表单(xxx.xaml.cs)的方法编写这样的代码: 然后我可以从DataGrid的一行中检索数据。 现在我尝试使用WPF的MVVM模式,我已经读到所有CRUD操作都应该在模型中编写。可以我尝试使用“DataGrid.SelectedIndex”,但如果不在codebehind文件中创建处理程序,就不可能实现 我想知道如何从MVVM的“Models”中的其他类中获取“DataGrid

早些时候,当我想编辑DataGrid中的一行时,我只是将光标设置在DataGtid的行上,并用codebehind表单(xxx.xaml.cs)的方法编写这样的代码:

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

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

值类型何时存储在堆栈中?
我读过很多关于C#的书,每当我读到关于值和引用类型的书时,我就会想到一个问题:值类型何时存储在堆栈中?因为程序员无法从类中初始化任何值类型。

您的ViewModel将具有填充模型对象的属性。您将在此处指定它们,以便视图能够显示数据

    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、ComboBox等。您可以使用ItemTemplates自定义数据的显示方式,但关键是将数据绑定到控件。这可以允许数据以仅ViewModel到View(单向)或View到ViewModel(单向到Source)的方向模式流动,或同时以这两种模式流动(双向)。因此,当用户更改所选索引时,数据将流回ViewModel,因为它设置为下面的双向。此处的ItemsSource设置为单向,因此只有ViewModel可以为视图更改该选项

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

如果ViewModels需要与BusinessLogic交互,只需传递数据即可。如果一个单独的ViewModel需要这些信息,您需要使用框架中可用的概念,例如EventAggregator(Prism),来传递数据,因为它们彼此不了解



MVVM的核心概念是像这样绑定模型和WPF控件的属性。我想你会想读更多关于它的书,以充分利用它的力量和设计。可以在StackOverflow上找到一些非常有用的问题/答案,MSDN有一些很好的教程等。

您的ViewModel将具有填充模型对象的属性。您将在此处指定它们,以便视图能够显示数据

    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、ComboBox等。您可以使用ItemTemplates自定义数据的显示方式,但关键是将数据绑定到控件。这可以允许数据以仅ViewModel到View(单向)或View到ViewModel(单向到Source)的方向模式流动,或同时以这两种模式流动(双向)。因此,当用户更改所选索引时,数据将流回ViewModel,因为它设置为下面的双向。此处的ItemsSource设置为单向,因此只有ViewModel可以为视图更改该选项

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

如果ViewModels需要与BusinessLogic交互,只需传递数据即可。如果一个单独的ViewModel需要这些信息,您需要使用框架中可用的概念,例如EventAggregator(Prism),来传递数据,因为它们彼此不了解



MVVM的核心概念是像这样绑定模型和WPF控件的属性。我想你会想读更多关于它的书,以充分利用它的力量和设计。可以在StackOverflow上找到一些非常有用的问题/答案,MSDN有一些好的教程等。

请与我分享好教程的链接。我找到了很多文章,但是我找不到绑定到的教程Datagrid@StepUp是一个非常全面的开始,你可以遵循,因为你有问题,你会利用SO/MSDN来了解更多细节。请与我分享好教程的链接。我找到了很多文章,但是我找不到绑定到的教程Datagrid@StepUp是一个非常全面的开始,您可以遵循它,当您有问题时,您将利用SO/MSDN了解更多细节。