C# WPF数据网格主细节MVVM

C# WPF数据网格主细节MVVM,c#,wpf,xaml,mvvm,datagrid,C#,Wpf,Xaml,Mvvm,Datagrid,我有一个WPF应用程序。我有两个datagrid,一个包含指标列表,另一个datagrid我想显示顶部datagrid中所选指标的更多细节 然而,我的细节网格没有显示任何数据,我也不知道为什么。我应该指出,主数据网格的填充情况良好。我已经在属性指示符selected的setter中设置了一个中断,并且可以看到它在选择一个项目时被调用&see the data是正确的,但只是没有显示在detail datagrid中 XAML C# 类视图模型:INotifyPropertyChanged {

我有一个WPF应用程序。我有两个datagrid,一个包含指标列表,另一个datagrid我想显示顶部datagrid中所选指标的更多细节

然而,我的细节网格没有显示任何数据,我也不知道为什么。我应该指出,主数据网格的填充情况良好。我已经在属性指示符selected的setter中设置了一个中断,并且可以看到它在选择一个项目时被调用&see the data是正确的,但只是没有显示在detail datagrid中

XAML


C#

类视图模型:INotifyPropertyChanged
{
列表指示列表;
指示器振打器\u指示器振打器;
公共列表指示符列表
{
获取{return\u indicatorList;}
设置
{ 
_指标列表=数值;
房地产变更(“指标列表”);
}
}
公共指示灯已选择振打指示灯
{
获取{return\u indicatorWrapper;}
设置
{
_指示器振打器=值;
OnPropertyChanged(“指示符说话者”);
}
}
公共视图模型()
{
DatabaseRetrieveSimulator db=新的DatabaseRetrieveSimulator();
IndicatorList=db.GetIndicators();
}
}

在您的指示符选择的setter中,您正在调用使用指示符Rapper更改的属性…它应该是指示符选择的:)

在您的指示符选择的setter中,您正在调用使用指示符Rapper更改的属性…它应该是指示符选择的:)

啊!好地方!尽管它仍然没有在我的详细信息中显示任何数据datagridDataGrid用于显示项目集合,但您将它绑定到单个项目,即DataContext.SelectedItem。如果IndicatorRapper类具有子项集合,则可以通过将绑定更改为类似ItemsSource=“{binding Path=IndicatorSelected.ChildItems}”的方式将网格绑定到该集合。如果您只想显示当前所选项目的所有字段,那么您需要为每个字段创建单独的控件,并在每个字段上设置绑定到指示符号selected.whatever.yes,这现在就有意义了。我已将其更改为Path=IndicatorSelected.Parameters,现在它可以在datagridsah和datagridsah中正常工作和显示!好地方!尽管它仍然没有在我的详细信息中显示任何数据datagridDataGrid用于显示项目集合,但您将它绑定到单个项目,即DataContext.SelectedItem。如果IndicatorRapper类具有子项集合,则可以通过将绑定更改为类似ItemsSource=“{binding Path=IndicatorSelected.ChildItems}”的方式将网格绑定到该集合。如果您只想显示当前所选项目的所有字段,那么您需要为每个字段创建单独的控件,并在每个字段上设置绑定到指示符号selected.whatever.yes,这现在就有意义了。我已经将其更改为Path=IndicatorSelected.Parameters,现在它可以在两个数据网格中正常工作和显示
<DataGrid x:Name="dgModels" Grid.Column="0" 
                      ItemsSource="{Binding Path=IndicatorList}"
                      SelectedItem="{Binding Path=IndicatorSelected}"
                      AutoGenerateColumns="false">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Model" Binding="{Binding Name}" IsReadOnly="True"/>
        <DataGridCheckBoxColumn Header="Run" Binding="{Binding Run}" IsReadOnly="false"/>
    </DataGrid.Columns>                                            
</DataGrid>

<DataGrid x:Name="dgParameterInfo" Grid.Column="1"
          ItemsSource="{Binding Path=IndicatorSelected}"
          AutoGenerateColumns="false">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Parameter Name" Binding="{Binding Path=Name}" IsReadOnly="True"/>
        <DataGridTextColumn Header="Default Value" Binding="{Binding Path=DefaultValue}" IsReadOnly="True"/>
        <DataGridTextColumn Header="Run Value" Binding="{Binding Path=RunValue}" IsReadOnly="True"/>
        <DataGridTextColumn Header="Parameter Type" Binding="{Binding Path=ParaType}" IsReadOnly="True"/>
    </DataGrid.Columns>                    
</DataGrid>    
class ViewModel : INotifyPropertyChanged
{
    List<IndicatorWrapper> _indicatorList;
    IndicatorWrapper _indicatorWrapper; 

    public List<IndicatorWrapper> IndicatorList
    {
        get { return _indicatorList; }
        set 
        { 
            _indicatorList = value;
            OnPropertyChanged("IndicatorList");
        }
    }
    public IndicatorWrapper IndicatorSelected
    {
        get { return _indicatorWrapper; }
        set
        {
            _indicatorWrapper = value;
            OnPropertyChanged("IndicatorWrapper");
        }
    }

    public ViewModel()
    {
        DatabaseRetrieveSimulator db = new DatabaseRetrieveSimulator();
        IndicatorList = db.GetIndicators();
    }
}