DataGridComboBox与嵌套的ReactiveList <class>对象绑定

时间:2018-06-14 01:04:44

标签: c# wpf reactiveui

我有一个继承自ReactiveObject的视图模型,其中包含数据网格中显示的项目列表。每个项目都包含需要在该数据网格的每一行中的Combobox中显示的项目的子列表。以下是我的视图模型中的属性:

private ReactiveList<Material> _materials;
public ReactiveList<Material> Materials
{
    get => _materials; set => this.RaiseAndSetIfChanged(ref _materials, value);
}

以下是Material类的内容:

public class Material
{
    public string StockCode { get; set; }
    public List<Bin> Bins { get; set; }
    public Bin SelectedBin { get; set; }
    public Material() { Bins = new List<Bin>(); }

    public class Bin
    {
        public string Name { get; set; }
    }
}

现在,我的XAML中有一个按钮,它调用一个反应命令,从SQL数据库(以及每个{_materials的嵌套Bins属性填充视图模型中的Material列表。 1}} item)我在ChangeTrackingEnabled = true列表中有_materials,它在VM的构造函数中设置(未显示)。我的数据网格中的所有内容都显示正常,但应该显示Bins列表的组合框完全为空。这是我的XAML的摘录:

<DataGrid x:Name="MaterialGrid" 
                  Margin="0 8 0 0"
                  ItemsSource="{Binding Materials}"
                  SelectedItem="{Binding SelectedMaterial}"
                  CanUserSortColumns="True"
                  CanUserAddRows="False"
                  AutoGenerateColumns="False"
                  IsReadOnly="False"
                  Visibility="{Binding IsLoading, Converter={StaticResource InvBooleanToVisibilityConverter}, Mode=OneWay}"
                  materialDesign:DataGridAssist.CellPadding="13 8 8 8"
                  materialDesign:DataGridAssist.ColumnHeaderPadding="8"
                  Grid.Row="1">
            <DataGrid.Columns>
              <DataGridTextColumn Header="Stock Code"
                                  IsReadOnly="True"
                                  Binding="{Binding StockCode}" />
              <DataGridComboBoxColumn Header="Bin"
                                      ItemsSource="{Binding Bins, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                                      SelectedItemBinding="{Binding SelectedBin, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                      DisplayMemberPath="Bin" />
            </DataGrid.Columns>
</DataGrid>

1 个答案:

答案 0 :(得分:0)

尝试将DisplayMemberPath属性设置为Name

<DataGridComboBoxColumn Header="Bin"
                        ItemsSource="{Binding Bins}" 
                        SelectedItemBinding="{Binding SelectedBin, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                        DisplayMemberPath="Name" />