从列表到对象的绑定

时间:2019-01-23 13:25:08

标签: c# wpf binding

在此处输入代码

“来自对象的我的财产”不会显示在Datagrid上。

我希望列类别中有一个字符串,该字符串在此项目的XAML中定义。 “ Id”和“描述”已成功显示在DataGrid上,但“类别”却未显示。请参见下面的屏幕截图。

<Grid>
    <DataGrid Name="view" AutoGenerateColumns="False" Margin="-4,0,4,0" >
        <DataGrid.Columns>

            <DataGridTextColumn Header="#" Binding="{Binding Id}" />

            <DataGridTemplateColumn Header="Category">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Label Content="{Binding Category.Name}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTemplateColumn Header="Description">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Label Content="{Binding Beschreibung}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

    public MainWindow()
    {
        DataContext = this;
        InitializeComponent();
        Start();
    }


    public void Start()
    {
        var payments = new List<Payment>();

        using (var dc = new DataContext())
        {
            payments = (from c in dc.Categories
                        join p in dc.Payments
                        on c.Id equals p.CategoryId
                        select p).ToList();
        }
        view.ItemsSource = payments;
    }
}

这是我的付款类别

    public partial class Payment
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int Id { get; set; }

    [Required]
    [StringLength(500)]
    public string Beschreibung { get; set; }

    public DateTime Datum { get; set; }

    public int Amount { get; set; }

    public int IsIncome { get; set; }

    public int CategoryId { get; set; }

    public virtual Category Category { get; set; }
}

这是我的类别课程

    public partial class Category
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Category()
    {
        Payments = new HashSet<Payment>();
    }
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int Id { get; set; }

    [Required]
    [StringLength(500)]
    public string Name { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Payment> Payments { get; set; }
}

string in column expected

2 个答案:

答案 0 :(得分:0)

尝试更改此代码

payments = (from c in dc.Categories
    join p in dc.Payments
    on c.Id equals p.CategoryId
    select p)
    .ToList();

payments = (from c in dc.Categories
    join p in dc.Payments
    on c.Id equals p.CategoryId
    select p)
    .Include("Category")
    .ToList();

它将急切地从数据库中加载Category,它应该可以解决您的问题。

答案 1 :(得分:-2)

最好实现MVVM模式,请查看:

MVVM Code project

因此,您的错误是在linq中选择p(付款),也许Category属性为空。您可以快速查看查询结果并查看它。