EF6,Code First。如何使用XAML Devexpress为GridControl列设置备用数据源

时间:2017-06-08 08:01:01

标签: wpf xaml entity-framework-6 devexpress dxgrid

我有两个相关的实体:

python manage.py make_import

还创建了List以在WPF中显示数据:

public class Event
{
    public string ID { get; set; }
    public DateTime EventDate { get; set; }
    public string EventData { get; set; } 
    public string DocID1 { get; set; }
    public int DocID2 { get; set; }
    public virtual Document Document1 { get; set; }
    public virtual Document Document2 { get; set; }

}

public class Document
{

    public string ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Number { get; set; }

}

我的EventList的数据来自实体事件:

private ObservableCollection<Event> eventList;
public ObservableCollection<Event> EventList
        {
            get { return eventList; }
            set
            {
                if (value != eventList)
                {
                    eventList = value;
                }
                RaisePropertyChanged(nameof(EventList));
            }
        }

我需要的是如果DocID1不为null,如何将GridControl Column“colFirstName”值设置为“Document1.FirstName”,如果DocID2不为null,则设置为“Document2.FirstName”。我的GridControl的XAML代码如下,您可以帮助在Xaml中进行操作,而不是在ViewModel中,或者如果在Xaml中无法做到这一点,那么在ViewModel中执行此操作的最佳方法是什么。

var query = DBContext.Events.Select(x => x).AsQueryable();
EventList = query.ToList();

2 个答案:

答案 0 :(得分:1)

这种逻辑应该在模型或视图模型类中实现。请记住,XAML只是一种标记语言。

只需创建另一个返回第一个匹配并绑定到此匹配的属性。如果您的实体类是自动生成的,则可以创建一个新的分部类:

public partial class Event
{
    public string DocName
    {
        get
        {
            if (Document1 != null)
                return Document1.FirstName;

            if (Document2 != null)
                return Document1.LastName;

            return null;
        }
    }
}
<dxg:GridColumn
    x:Name="colFirsnName"
    Width="120"
    FieldName="DocName"
    Header="First Name"
    Visible="True"
    VisibleIndex="1" IsReadOnly="true" />

答案 1 :(得分:1)

您可以使用UnboundExpression属性创建一个custom expression的列。例如,要有条件地显示来自不同属性的值,请使用 Iif 函数:

<dxg:GridColumn FieldName="CustomColumn" x:Name="colFirsnName" 
                UnboundExpression="Iif(IsNullOrEmpty([DocID1]), [Document2.FirstName], [Document1.FirstName])" 
                UnboundType="String"/>