2014-07-04 13 views
0

다음 버튼 이벤트에서 다른 목록의 항목에 항목을 추가하고 있습니다. 항목은 하드 lstPermissions 코딩하고 lstGivenPermissionsdatasource가 설정되지 않은바인딩 후 ListBox에 항목 추가 및 제거

private void btnAdd_Click(object sender, EventArgs e) 
    { 
     if (lstPermissions.SelectedItem != null) 
     if (!lstGivenPermissions.Items.Contains(lstPermissions.SelectedItem)) 
     { 
      lstGivenPermissions.Items.Add(lstPermissions.SelectedItem); 
     } 
    } 

, 괜찮습니다. 그러나 데이터를 lstGivenPermissions에 바인딩 한 후이 메서드를 실행하려고하면이 예외가 발생합니다.

DataSource 속성을 설정하면 항목 컬렉션을 수정할 수 없습니다.

은 내가 데이터 바인딩이 예외를 발생시킨 것을 이해할 수 lstGivenPermissions

public List<string> GivenPermission 
    { 
     get { return lstGivenPermissions.Items.Cast<string>().ToList(); } 
     set { lstGivenPermissions.DataSource = value; } 
    } 

에 데이터를 바인딩이 속성을 사용하고 있습니다. 하지만 내 요구 사항은 lstPermissions에 대한 모든 사용 권한을로드하고 데이터베이스에서 lstGivenPermission에 대한 선택한 사용자의 사용 권한을로드하려고합니다. 그러면 lstGivenPermissions에 항목을 추가하고 제거 할 수 있어야합니다. 이 작업을 수행하는 방법을 알려 주시겠습니까? 당신은 목록 컨트롤에 바인딩 속성을 사용해서는 안

+0

DataSource 속성을 설정 한 후 ListBox.Items 컬렉션을 수정하려는 것 같습니다. ObservableCollection에 바인딩하고 컬렉션에 항목을 추가/제거 할 수 없습니다. –

+0

'ObservableCollection'이'winforms'에 적합한 방법인지는 모르겠지만 @RodrigoSilva가 맞다면, 항목을 삭제하지 말고 기본 데이터 소스 공급자 (wpf의 뷰 모델)의 메소드'Delete'를 호출하십시오. 데이터를 변경하고 UI에 변경 사항을 알립니다 ('winforms'에서는 바인딩을 사용하지 않았습니다.). – Sinatr

+1

컨트롤이 데이터 바운드 인 경우 기본 데이터 소스의 데이터를 변경하여 내용을 변경해야합니다 – TaW

답변

2

... 속성은과 같이/부하 값을 저장해야합니다 : 당신이 결합해야하는 경우

private List<string> _givenPermission; 
public List<string> GivenPermission 
{ 
    get { return _givenPermission; } 
    set { _givenPermission = value;} 
} 

, 대신 이런 식으로 일을하려고 :

private List<string> _givenPermission; 
public List<string> GivenPermission 
{ 
    get { return _givenPermission; } 
    set { _givenPermission = value; lstGivenPermissions.DataSource = value; } 
}