繁体   English   中英

如何通过Silverlight以编程方式设置ComboBox的SelectedItem?

[英]How To Set ComboBox's SelectedItem Programmatically via Silverlight?

这是我的情况-我正在使用SL3(和WCF数据服务),并且有一个用于管理员工的自定义表单。 在表单上,​​我有一些简单的TextBox和一些ComboBox用于输入Employee的基本信息。 在我的体系结构中,我有一些基类,一个用于处理对象的集合(ObservableCollection和INotifyPropertyChanged实现),另一个用于实体(捕获并调用OnPropertyChanged(“ prop”)。),在文件(.cs)后的代码中,我有一个事件处理程序,用于处理ComboBox的_SelectedItemChanged(),例如EmployeeType,其中在数据库中,“代码”列(其他列)的值可能类似于Director,Staff,Reporter,Manager等。存在于EmployeeType表中,例如Description,ModifiedDate和ID。我在窗体控件上有一些构造函数,当我用空的构造函数加载表单时,因此没有任何加载(这是应该加载和更正的方式),一切正常,例如,我可以输入FirstName(TextBox),HireData(TextBox)和EmployeeType(ComboBox)之类的数据。我遇到的问题是何时加载此表单,并且事先知道EmployeeType,因此我不知道如何设置组合框的选择 dItem以编程方式?

我尝试过这样的事情,说我希望表单将EmployeeType加载为Manager,所以我在Load()方法中输入了:

private SetEmployeeType()
{
     var employeeType = new EmployeeType { Code = "Manager" };
     this.EmployeeTypeComboBox.SelectedItem = employeeType;
}

但是,当我遍历代码(F5)时,我看到employeeType是EmployeeType,但是它的属性没有完全填充(除了上面我明确称为“ Manager”的代码以外,所有属性都是空白),因此当我的_SelectedItemChanged()事件为称为.SelectedItem = null,因此ComboBox加载时未拾取任何内容(ItemSource绑定到列表,并且确实通过了)。

仅供参考,我还有其他方法可以加载EmployeeTypes列表,例如GetEmployeeTypes(),并且可以正常加载。 如果ComboBox为空,然后我选择一个值,则将正确的值提交给数据库,但是正如我指出的那样,有时我想预定义SelectedItem,从而禁用ComboBox以禁止用户输入无效数据。

我什至尝试了一些LINQ,似乎不起作用:

var type = from e in employeeTypeList // collection loads fine with 10 items
     where e.Code = "Manager"
     select e;

当我跟踪上述查询时,“类型”的确带有正确的EntityType对象,并填充了所有属性(count = 1,这是正确的),但由于ComboBox的SelectedItemChanged,它似乎未绑定到ComboBox。 ()期望这样的事情:

var employeeType = this.EmployeeType.SelectedItem as EmployeeType; // i.e. expecting EmployeeType

但是,相反,我的LINQ查询返回的值类似于:

IEnumerable<EmployeeType> // with some extra stuff...

PS。 因为我现在在家,所以我正在从内存中工作,这是我工作中的代码,因此,如果我缺少明显的内容,请原谅。 我尝试了不同的方案,但似乎无法弄清楚。 在此先感谢您的协助!

听起来您想将所选项目设置为经理。

如果是这样,您想要这样的事情:

var type = (from e in employeeTypeList
    where e.Code = "Manager" 
    select e).FirstOrDefault();
EmployeeType.SelectedItem = type;

您的代码正在创建一个管理器列表,尽管它只有一个项目,但与SelectedItem期望的数据类型不匹配。 解决方案是使用FirstOrDefault从列表中提取一个项目,这将给出列表中的第一项;如果列表为空,则为null。

如果已设置,请尝试将模式设置为TwoWay而不是Oneway。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM