【问题标题】:WPF Datagrid Master Detail MVVMWPF Datagrid Master Detail MVVM
【发布时间】:2013-12-04 23:05:19
【问题描述】:

我有一个 WPF 应用程序。我有两个数据网格,一个包含指标列表,另一个数据网格我想显示顶部数据网格的选定指标的更多详细信息。

但是我的详细信息网格没有显示任何数据,我不知道为什么。我应该指出,主数据网格填充得很好。我在属性 IndicatorSelected 的设置器中设置了一个中断,并且可以看到它在选择项目时被调用并且查看数据是正确的,但只是没有显示在详细数据网格中。

XAML

<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>    

C#

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();
    }
}

【问题讨论】:

    标签: c# wpf xaml mvvm datagrid


    【解决方案1】:

    在您的 IndicatorSelected 设置器中,您使用 IndicatorWrapper 调用 OnPropertyChanged...它应该是 IndicatorSelected :)

    【讨论】:

    • 啊!好地方!虽然它仍然没有在我的详细数据网格中显示任何数据
    • DataGrid 用于显示项目集合,您将其绑定到单个项目,即 DataContext.SelectedItem。如果您的 IndicatorWrapper 类有一组子项,那么您可以通过将绑定更改为类似 ItemsSource="{Binding Path=IndicatorSelected.ChildItems}" 的方式将网格绑定到该集合。如果您只想显示当前选定项目的所有字段,那么您需要为每个字段创建单独的控件,并在每个字段上设置与 IndicatorSelected.whatever 的绑定。
    • 是的,现在说得通了。我已将其更改为 Path=IndicatorSelected.Parameters,它现在可以在两个数据网格中正常工作和显示
    猜你喜欢
    • 1970-01-01
    • 2015-11-11
    • 2017-08-13
    • 2012-01-23
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    相关资源
    最近更新 更多