DevExpress LookupEdit设置EditValue不起作用

pea*_*ker 2 c# devexpress

我正在尝试让LookUpEdit在显示表单时显示初始值。我将国家列表绑定为数据源,然后在加载表单时设置EditValue,该表单应将国家显示为LookUpEdit中的选定项。不幸的是,它只是显示一个空值。LookUpEdit似乎可以正常工作,它使我可以滚动浏览国家列表并选择一个项目,然后在提交表单时将值传回。

国家类别:

public class Country
{
    public Country();
    public int CountryId {get; set;}
    public string CountryName {get; set;}
    public string IsoCode {get; set; }
}
Run Code Online (Sandbox Code Playgroud)

包含LookUpEdit的表单后面的代码:

this.country.Properties.DataSource = this.Countries;
this.country.Properties.DisplayMember = "CountryName";
this.country.Properties.ValueMember = "CountryId";

this.country.EditValue = initialCountry;
this.country.DataBindings.Add("EditValue", viewModel.Address, "AddressCountry", false, DataSourceUpdateMode.OnPropertyChanged);
Run Code Online (Sandbox Code Playgroud)

在此示例中,this.Countries已填充List<Country>initialCountry设置为的实例CountryviewModel.Address包含属性Country AddressCountry

我已经尝试过EditValue直接设置直接和设置数据绑定到EditValue本身。无论我尝试什么,在加载表单时LookUpEdit始终为空白,我需要将其设置为initialCountry。我敢肯定这确实很简单,但是我没有看到它,因此我们非常感谢您的帮助。

Dmi*_*ryG 5

除了Marko的答案:

在查询中有一种特殊的数据绑定方式可以绑定到整个业务对象

this.country.Properties.DataSource = this.Countries;
this.country.Properties.DisplayMember = "CountryName";
this.country.Properties.KeyMember = "CountryId";
this.country.EditValue = initialCountry;
Run Code Online (Sandbox Code Playgroud)

此模式允许查找机制通过将键字段(“ CountryId”)分配给RepositoryItemLookUpEditBase.KeyMember属性,在查找数据源中找到编辑器的值(一个Country业务对象)与另一个Country业务对象之间的匹配。

这是此模式的一些其他优点:

  • 您可以使用多个键字段(“复合/复合键”功能);

    // field names delimited with the ';' character
    this.city.Properties.KeyMember = "CountryId;RegionId;CityName";

  • 您可以匹配从单独的数据上下文加载的业务对象,并使用延迟加载方法的所有优点:

    // The CountryId value is enough for match.
    // All the another fields(e.g. CountryName) can be skipped while loading
    this.country.EditValue = new Country() { CountryId = 5 }