带有字典的 C# WPF ObservableCollection 到 MVVM Datagrid

C# WPF ObservableCollection with dictionary inside to MVVM Datagrid

问题已解决,我不再使用字典,而是将其“转换”为 OS (ObservableCollection),并将其绑定到 DatagridTemplateColumn

内的 Datagrid

我正在尝试添加我的 ObservableCollaction,它有一个 属性 Name 和一个具有以下属性的字典:NameAvgPriceShares

如何将字典中的 NameAvgPriceShares 获取到 DataGrid

ObservableCollection:

private ObservableCollection<WatchlistModel> _watchlists;
public ObservableCollection<WatchlistModel> Watchlists
{
    get { return _watchlists; }
    set { _watchlists = value; OnPropertyChanged(); }
}

监视列表模型

private string _name;
public string Name
{
    get { return _name; }
    set { if(_name != value) { _name = value; OnPropertyChanged(); } }
}

private Dictionary<string, StockModel> _stocks;
public Dictionary<string, StockModel> Stocks
{
    get { return _stocks; }
    set { if (_stocks != value) { _stocks = value; OnPropertyChanged(); } }
}

数据网格

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=Watchlists, UpdateSourceTrigger=PropertyChanged}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" />
        <DataGridTextColumn Header="Average Price" Binding="{Binding Path=AvgPrice}" />
        <DataGridTextColumn Header="Shares" Binding="{Binding Path=Shares}" />
    </DataGrid.Columns>
</DataGrid>

Json格式

{
  "name": "My Watchlist",
  "stocks": {
    "Zaptec": {
      "avgPrice": "2,14",
      "name": "Zaptec",
      "shares": 121
    }
  }
}

使用

    <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
<!-- Here you can add items control or whatever and bound its ItemSource to your 
Stocks -->
            </DataTemplate>
        </DataGridTemplateColumn>
    </DataGridTemplateColumn.CellTemplate>

但我不建议你使用词典。改为制作 ObservableCollection。 Bind Dictionary with observe on Items changed 是相当困难的。