如何有选择地在数据源中的数据网格上显示某些属性?

时间:2019-06-07 09:48:02

标签: c# wpf binding datagrid datasource

我有两个数据网格,它们都有不同的用途。我目前有一个变量ObservableCollection<Competitor> Competitors作为数据网格的数据源。

我想做的是使用一个数据网格以排行榜的方式显示“竞争对手”,以显示他们和他们的时间(这是一个类似种族的排行榜),最快的时间是赢家。而且,我希望第二个数据网格能够在“积分”排行榜中向用户显示,显示同一用户以及过去多次比赛中所有累积的积分。

因此,如您所知,为数据网格设置数据源将使该数据网格自动为该类中的每个变量创建列,如下所示。但是,在班级中,我希望在一列而不是另一列的变量,反之亦然。例如,在第一个数据网格中,我想要用户名,“ VI”,“ TimeFormated”和DQ,在第二个数据网格中,我想要用户名和Score。

这是我正在使用的完整课程:

internal class Competitor
{
    public int Place { get; set; }
    public string Username { get; set; }
    public int VIStart { get; set; }
    public int VIEnd { get; set; }
    public int VIs { get { return VIEnd - VIStart; } }
    public double TimeInSeconds { get { return GetTime(); } }
    public string TimeFormated { get { return GetFormatTime(); } }
    public int Rerecords { get; set; }
    public bool DQ { get; set; }
    public string DQReason { get; set; }
    public double Score { get; set; }

    // More code here that is unimportant
}

因此,我认为最好的方法是自定义设置数据网格的两个列,因为它们是如此特定,但是,我想知道是否有一种方法可以选择在代码中将哪些变量显示为列标题

我知道您可以根据this问题设置[Browsable(false)],但是据我所知,它是无法切换的。

指导以及任何提示和建议将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

用属性装饰源属性不会解决您在一个DataGrid中显示特定属性/列但在另一个属性中隐藏它的问题。

解决此问题的正确方法是在视图的代码背后或XAML标记中以编程方式定义要显式查看的实际列。

自动生成列可能看起来很方便,但不是很灵活。