2010-03-10 71 views
0

這裏是我的場景 - 我正在使用SL3(和WCF數據服務),並且我有一個管理員工的自定義表單。在表單中,我有一些簡單的TextBox(es)和一些ComboBox(es)用於輸入員工的基本信息。在我的架構中,我有一些基類,一個用於處理對象集合(實現ObservableCollection和INotifyPropertyChanged),另一個用於實體(捕獲和調用OnPropertyChanged(「prop」))。在我的代碼後面的文件(.cs) ,我有一個處理組合框_SelectedItemChanged()的事件處理程序,例如EmployeeType,在數據庫中,其值可能類似於代碼列的Director,Staff,Reporter,Manager等存在於EmployeeType表中,像Description,ModifiedDate和ID)。我在表單控件上有一些構造函數,當我用一個空的構造函數加載表單並因此沒有加載任何內容(這是它應該加載和修正的方式)時,一切正常,即我可以輸入像FirstName(TextBox),HireData(TextBox)和EmployeeType(ComboBox)這樣的數據。我遇到的問題是,當我加載這個表單,並且我知道EmployeeType時,我不知道如何設置ComboBox的Selec編程的tedItem?如何通過Silverlight以編程方式設置ComboBox的SelectedItem?

我想這樣的事情,說我要加載EmployeeType作爲經理的形式,讓我在我的Load()方法:

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

但正如我跟蹤過我的代碼(F5 ),我將employeeType看作EmployeeType,但是它的屬性沒有被完全填充(除了Code之外,所有的空白都是空的,因爲我上面明確地稱爲「Manager」),所以當我調用_SelectedItemChanged()事件時,.SelectedItem = null,組合框加載沒有采摘(ItemSource綁定到列表,它確實通過)。我有其他方法,我加載我的僱員類型列表,例如, GetEmployeeTypes()並加載正常。如果ComboBox是空白的,然後我選擇一個值,則將正確的值提交給數據庫,但正如我注意到的,有時我想要預先定義SelectedItem,並因此禁用ComboBox以禁止用戶輸入無效數據。

我甚至嘗試了一些LINQ像這樣,它似乎不工作:

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

當我通過上面的查詢追蹤,在「類型」不回來與正確的EntityType對象的所有屬性人口(計數= 1,這是正確的),但它似乎並沒有綁定到自組合框的SelectedItemChanged(組合框)期待這樣的事情:

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

而是我的LINQ查詢帶回值類似於:

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

PS。因爲我目前在家,而且這是來自我的工作代碼,所以請原諒我,如果我缺少明顯的東西,請原諒我。我嘗試了不同的場景,但似乎無法弄清楚。在此先感謝您的幫助!

回答

2

這聽起來像你想設置選定的項目是經理。

如果是的話,你想是這樣的:

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

您的代碼創建管理器的列表,其中儘管它只有一個項目,不匹配的SelectedItem預期的數據類型。解決方法是使用FirstOrDefault從列表中提取列表中的第一項,如果列表爲空,則爲空。

+0

謝謝Gabe,明天我會試試這個,並回復我的結果! – Varn 2010-03-10 06:52:49

+0

Gabe,您的解決方案是正確的!謝謝! – Varn 2010-03-11 05:59:57

0

嘗試將模式設置爲TwoWay而不是Oneway,如果已設置。

+0

冗長的問題; 簡答題; – raj 2010-03-10 06:43:17

+0

我的綁定在我的XAML中設置爲TwoWay。任何其他想法? – Varn 2010-03-10 06:46:39

相關問題