Datagrid 列绑定到类

问题描述

我有一个 DataGrid 来显示 ProductModel 类型的产品。在每个产品中,我都有一个 ProductType 类型的 ProductTypeModel。我无法将此 ProductTypeModel 类的属性绑定到数据网格列。

绑定其他属性,如 Id、UserId、ProductLotNumber 等,工作正常并显示在数据网格上。我唯一无法展示的是 ProductType 和它的嵌套属性

(我使用的是 Caliburn.Micro)

这是产品模型

public class ProductModel : IProductionInputItemmodel,IProductionOutputItemmodel
{
    public int Id { get; set; }
    public string UserId { get; set; }
    public ProductTypeModel ProductType { get; set; }
    public string ProductLotNumber { get; set; }
    public int CropYear { get; set; }
    public string ProductNote { get; set; }
    public bool IsActive { get; set; }
    public DateTime CreateDate { get; set; }
    public DateTime UpdateDate { get; set; }

}

这里是 ProductTypeModel

public class ProductTypeModel
{
    public int Id { get; set; }
    public string UserId { get; set; }
    public string ProductName { get; set; }
    public bool IsAseptic { get; set; }
    public bool IsPuree { get; set; }
    public bool IsPureeConcentrate { get; set; }
    public bool IsClearJuice { get; set; }
    public bool IsCloudyJuice { get; set; }
    public bool IsClearConcentrate { get; set; }
    public bool IsCloudyConcentrate { get; set; }
    public bool IsOrganic { get; set; }
    public DateTime CreateDate { get; set; } = DateTime.UtcNow;
    public DateTime UpdateDate { get; set; } = DateTime.UtcNow;
    public bool IsActive { get; set; }
}

我想要实现的是在单元格的堆栈面板中显示 ProductName 和其他布尔属性。但我不知道怎么做。

这是我到现在为止可以想出但无法实现的内容

<ScrollViewer>
        <Grid>
            <Grid.ColumnDeFinitions>
                ...
            </Grid.ColumnDeFinitions>
            <Grid.RowDeFinitions>
                ...
            </Grid.RowDeFinitions>
            <DataGrid Grid.Row="1" Grid.Column="1" x:Name="Products">
                <DataGrid.Columns>
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.Header>
                            Ürün Türü
                        </DataGridTemplateColumn.Header>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Vertical">
                                    <TextBlock Text="{Binding ProductType.ProductName}"/>
                                    <StackPanel Orientation="Horizontal">
                                        <TextBlock Foreground="Purple" FontSize="8" Text="Aseptik " Visibility="{Binding ProductType.IsAseptic,Converter={StaticResource BooleanToVisibilityConverter},FallbackValue=Collapsed}"/>
                                        <TextBlock Foreground="DarkGreen" FontSize="8" Text="Organik " Visibility="{Binding ProductType.IsOrganic,FallbackValue=Collapsed}"/>
                                        <TextBlock Foreground="Red" Text="Püre " FontSize="8" Visibility="{Binding ProductType.IsPuree,FallbackValue=Collapsed}"/>
                                        <TextBlock Foreground="Red" Text="Püre Konsantre " FontSize="8" Visibility="{Binding ProductType.IsPureeConcentrate,FallbackValue=Collapsed}"/>
                                        <TextBlock Foreground="Red" Text="Berrak NFC " FontSize="8" Visibility="{Binding ProductType.IsClearJuice,FallbackValue=Collapsed}"/>
                                        <TextBlock Foreground="Red" Text="Bulanık NFC " FontSize="8" Visibility="{Binding ProductType.IsCloudyJuice,FallbackValue=Collapsed}"/>
                                        <TextBlock Foreground="Red" Text="Berrak Konsantre " FontSize="8" Visibility="{Binding ProductType.IsClearConcentrate,FallbackValue=Collapsed}"/>
                                        <TextBlock Foreground="Red" Text="Bulanık Konsantre " FontSize="8" Visibility="{Binding ProductType.IsCloudyConcentrate,FallbackValue=Collapsed}"/>

                                    </StackPanel>
                                </StackPanel>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTextColumn Header="Lot Numarası" />
                </DataGrid.Columns>

            </DataGrid>

        </Grid>
    </ScrollViewer>
</DockPanel>

还有这里的视图模型:

public class Productviewmodel : Screen
{
    private readonly IEventAggregator _events;
    private readonly IProductEndPoint _productEndPoint;

    public Productviewmodel(IEventAggregator events,IProductEndPoint productEndPoint)
    {
        _events = events;
        _productEndPoint = productEndPoint;
    }

    private BindableCollection<ProductModel> _products;

    public BindableCollection<ProductModel> Products
    {
        get { return _products; }
        set
        {
            _products = value;
            NotifyOfPropertyChange(() => Products);
        }
    }


    protected override async void OnViewLoaded(object view)
    {
        base.OnViewLoaded(view);
        var products = await _productEndPoint.GetAllProducts();
        Products = new BindableCollection<ProductModel>(products);
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...