2009-06-18 6 views
1

Linq 및 ObservableCollections 내 WPF 응용 프로그램에서 문제가 있습니다. 문제의Linq 및 ObservableCollection

컨텍스트 :

나는 두 개의 테이블과 매우 간단한 SQL 데이터베이스를 만든

: 사용자 및 BankAccounts. 사용자 테이블에는 BankAccounts 테이블과 일대 다 관계가 있습니다. 다음으로 Linq-to-SQL 데이터 룩을 만들었습니다. 두 테이블 사이의 조화가 잘 감지되었습니다.

다음으로 잘 작동하는 모든 사용자를 retreive하는 함수를 만들었습니다

DataClassesDataContext dc = new DataClassesDataContext 

var query = from u in dc.Users 
      select u; 

는 지금은 각 사용자 (여전히 매우 가능성이 있지만)에 새 BankAccount가 추가한다고 가정합니다. 나는 위의 모든 잘 작동 다음 코드

for each(User u in query) 
{ 
    u.BankAccounts.Add(New BankAccount()); 
} 

을 추가 할 수 있습니다. BankAccounts 속성은 데이터베이스와 Linq DataClasses의 assosiation으로 인해 자동으로 User 클래스의 일부입니다.

그러나 내 응용 프로그램에서는 먼저 쿼리 결과를 ObservableCollection에 추가합니다. 이로써 나는 데이터 바인딩과 changenotification에서 모든 종류를 사용할 수 있습니다. 이것은 다음 코드에 의해 수행됩니다.

ObservableCollection<User> oUsers = new ObservableCollection<User>(query); 

문제 : ObservableCollection에 내 나는 그것이 유형의 지금 EntitySet < 때문에 사용자 BankAccounts 속성 anyting 할> 수 없습니다. 그래서 나는 더 이상 다음 진술을 할 수 없다. queryresults가 ObservableCollection에 추가 될 때

for each(User u in oUsers) 
{ 
    u.BankAccounts.Add(New BankAccount()); 
} 

어떻게 든 더이상 user.BankAccounts 특성 액세서 불가능하다. 그러나 BankAccounts 속성을 목록 상자 같은 모든 컨트롤에 바인딩 할 수 있으며 올바른 데이터가 들어 있습니다.

누군가가이 "할당 된"속성에 액세스 할 수있는 observableCollction (또는 유사한 컬렉션)을 어떻게 만들 수 있습니까? 나는 정말로 해결책을 고대하고있다.

미리 감사드립니다. 안부,

바스 Zweeris E : [email protected]

답변

2

것이 된 IQueryable을 구현합니다 원래 query를 추적, 당신은 당신이에 대해 필요한 모든 추가 쿼리를 실행할 수 있습니다.

ObservableCollection은 바인딩 할 항목이 있어야합니다. 새 수집 항목을 추가하려고하지만 사용자가 편집하기 전에 데이터베이스에 푸시하지 않으려면 매우 유용합니다.

예 :

// Create a new blank client type 
var ct = new ClientType() 
{ 
    IsArchived = false, 
    Description = "<new client type>", 
    Code = "CT000", 
    CanLoginOnline = true 
}; 

// Tell the data source to keep track of this object 
db.ClientTypes.InsertOnSubmit(ct); 

// Also add the object to the observable collection so that it can immediately be shown in the UI and editted without hitting the db 
clienttypes.Add(ct); 
관련 문제