0

mvvm 패턴을 사용하여 사용자 정의 클래스의 ObservableCollection 속성에 TwoWay 바인딩을 만드는 방법은 무엇입니까?

public class UserGroup 
{ 
    public string GroupName { get; set; } 
    public bool IsIntheGroup{ get; set; } 
} 

UserGroup 항목의 ObservableCollection을 컬렉션의 각 항목에 대한 확인란이 들어있는 목록 상자에 바인딩하고 확인란을 UserGroup의 IsIntheGroup 속성을 기반으로 확인합니다. 내 ViewModel에서 ObservableCollection을 UserGroup 클래스로 만들었습니다.

public ObservableCollection<UserGroup> Groups { get; set; } 

내 데이터베이스 모델에서 해당 내용 (UserGroup 인스턴스)을로드했습니다.

내 코드에서 다음 코드를 사용했습니다.

<ListBox ItemsSource="{Binding Groups, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <StackPanel Orientation="Horizontal"> 
      <CheckBox IsChecked="{Binding IsIntheGroup, Mode=TwoWay}"/> 
      <TextBlock Text="{Binding GroupName}" /> 
     </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

사용자가 목록의 확인란을 선택/선택 취소하여 양방향 바인딩에 실패 할 때 알림을받지 못하는 문제가 있습니다 ...

이 경우 양방향 바인딩을 어떻게 수행합니까?

답변

0

UserGroup 클래스는 INotifyPropertyChanged를 구현해야하며 해당 클래스의 각 속성은 해당 Setter에서 PropertyChanged 이벤트를 호출해야합니다. ObservableCollection은 컬렉션에서 삭제 된 항목을 UI에 알리고 컬렉션의 개별 인스턴스마다 속성을 변경하지 않습니다.

+0

내 컬렉션에 ViewModel을 반영하는 방법에 대한 아이디어가 있습니까? 내 데이터베이스를 업데이트하는 데 사용할 수 있도록 ObservableCollection을 modificatins로 새로 고치는 방법을 의미합니다. – mill

+0

INPC를 구현하면 바인딩이 두 가지 방식으로 작동합니다. 즉, 컬렉션의 항목에 대한 프로그램적인 변경 사항이 모두 업데이트됩니다. UI 및 사용자가 호출 한 UI 변경 사항은 컬렉션 인스턴스를 업데이트합니다. 그런 다음 변경 사항을 유지하기 위해 뷰 모델의 모든 저장 또는 적용 동사에서 ObservableCollection을 탐색 할 수 있습니다. – devdigital

관련 문제