2010-03-10 5 views
0

여기에 제 시나리오가 있습니다. SL3 (및 WCF 데이터 서비스)에서 작업하고 있으며 직원을 관리하는 사용자 지정 양식이 있습니다. 양식에는 Employee에 대한 기본 정보를 입력하기위한 간단한 TextBox (es)와 ComboBox (es)가 있습니다. 내 아키텍쳐에는 객체 컬렉션 (ObservableCollection 및 INotifyPropertyChanged 구현)과 Entity (OnPropertyChanged ("prop") 호출)를위한 기본 클래스가 있습니다. 코드 파일 (.cs) 예를 들어 EmployeeType과 같이 데이터베이스에서 값이 Director, Staff, Reporter, Manager 등과 같이 Code 열 (다른 열 (다른 열))과 같을 수있는 ComboBox (예 : EmployeeType)의 _SelectedItemChanged()를 처리하는 이벤트 처리기가 있습니다. Description, ModifiedDate 및 ID와 같은 EmployeeType 테이블에 존재합니다.) 폼 컨트롤에 일부 생성자가 있는데 빈 생성자를 사용하여 폼을로드하면 아무 것도로드되지 않습니다 (로드 및 수정 방법). 모든 것이 완벽하게 작동합니다. 즉, FirstName (TextBox), HireData (TextBox) 및 EmployeeType (ComboBox)과 같은 데이터를 입력 할 수 있습니다. 문제는 내가이 양식을로드 할 때이며, EmployeeType을 사전에 알고 있으므로 ComboBox의 Selec 설정 방법을 모르겠습니다. 프로그래밍 방식으로 tedItem을 사용할 수 있습니까?Silverlight를 통해 프로그래밍 방식으로 ComboBox의 SelectedItem을 설정하는 방법?

는 내가 관리자로 EmployeeType를로드 할 양식을 싶은 말은, 이런 식으로 뭔가를 시도, 그래서 난 내 부하() 메소드가 : 내 코드를 통해 추적하고 있습니다로 (F5를

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

을하지만,), 나는 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 객체와 오는가 이 같은 인구) (정확한지 = 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을 사용하여 목록에서 항목 하나를 추출하거나 목록이 비어 있으면 null을 추출하면됩니다.

+0

감사합니다. 게이, 내일 다시 시도하고 결과로 답장 해 드리겠습니다. – Varn

+0

개, 해결책은 정확합니다! 감사! – Varn

0

이렇게 설정 한 경우에는 원 웨이 대신 TwoWay로 설정하십시오.

+0

긴 질문; 짧은 답변; – raj

+0

내 바인딩이 내 XAML의 TwoWay로 설정되었습니다. 다른 아이디어? – Varn

관련 문제