这是我的方案 - 我正在使用SL3(和WCF数据服务),我有一个管理员工的自定义表单。在表单上,我有一些简单的TextBox和一些ComboBox用于输入Employee的基本信息。在我的架构中,我有一些基类,一个用于处理对象集合(实现ObservableCollection和INotifyPropertyChanged),另一个用于实体(捕获和调用OnPropertyChanged(“prop”)。在我的代码后面文件(.cs) ,我有一个处理ComboBox的_SelectedItemChanged()的事件处理程序,例如,EmployeeType,在数据库中,值可能类似于Code列的Director,Staff,Reporter,Manager等(其他列)存在于EmployeeType表中,如Description,ModifiedDate和ID)。我的表单控件上有一些构造函数,当我使用空构造函数加载表单时,没有任何内容被加载(这是它应该加载和纠正的方式),一切都运行得很好,即我可以输入FirstName(TextBox),HireData(TextBox)和EmployeeType(ComboBox)等数据。我遇到的问题是什么时候,我正在加载这个表单,我之前知道EmployeeType,所以我不知道如何设置ComboBox的Se lectedItem以编程方式?
我试过这样的事情,说我希望表单将EmployeeType加载为Manager,所以我有我的Load()方法:
private SetEmployeeType()
{
var employeeType = new EmployeeType { Code = "Manager" };
this.EmployeeTypeComboBox.SelectedItem = employeeType;
}
但是当我正在浏览我的代码(F5)时,我看到employeeType为EmployeeType,但是它的属性没有完全填充(除了Code之外所有空白,我明确地称之为“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;
当我追踪上面的查询时,'type'确实返回了正确的EntityType对象,其中填充了所有属性(count = 1,这是正确的),但它似乎没有绑定到ComboBox ComboBox的SelectedItemChanged()期待这样的事情:
var employeeType = this.EmployeeType.SelectedItem as EmployeeType; // i.e. expecting EmployeeType
但是,我的LINQ查询会返回类似以下内容的值:
IEnumerable<EmployeeType> // with some extra stuff...
PS。我正在记忆中工作,因为我现在在家,这是我工作中的代码,所以如果我遗漏了一些明显的东西,请原谅。我尝试过不同的场景,似乎无法弄明白。提前感谢您的任何帮助!
答案 0 :(得分:2)
听起来您想将所选项目设置为经理。
如果是这样,你想要这样的东西:
var type = (from e in employeeTypeList
where e.Code = "Manager"
select e).FirstOrDefault();
EmployeeType.SelectedItem = type;
您的代码正在创建一个管理器列表,即使它只有一个项目,也与SelectedItem期望的数据类型不匹配。对此的解决方案是使用FirstOrDefault
从列表中提取一个项目,这将给出列表中的第一个项目,如果列表为空,则为null。
答案 1 :(得分:0)
如果已设置,请尝试将模式设置为TwoWay而不是Oneway。