WPF Toolkit에서 CheckListBox를 사용하고 있으며이를 내 ViewModel에 바인딩하려고합니다. 컨트롤에서 선택한 값을 얻는 것 외에도 모든 선택을 지우는 버튼 클릭을 통해 재설정 할 수 있기를 원합니다. 컬렉션의 각 항목에 대해 선택한 상태 나 확인 된 상태를 바인드하는 방법이 달라 붙어 있지만, 전체적인 접근 방식이 꺼져 있으면 그 점에 대해서도 어느 정도 이해할 수 있습니다. 뷰 모델에서 DrugInfluence 개체의 컬렉션라는CheckListBox를 ViewModel에 바인딩하십시오.
public class DrugInfluence : INotifyPropertyChanged
{
public string Impairment { get; set; }
private bool isChecked;
public bool IsChecked
{
get { return isChecked; }
set
{
if(isChecked != value)
{
isChecked = value;
OnPropertyChanged("IsChecked");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
내가 문자열 설명과 나는 각각의 체크 박스의 상태를 표시하는 데 사용할 계획 부울 속성을 사용하여 간단한 클래스를 만들었습니다
... 나는 CheckListBox 제어 iteself에 바인딩 할 ImpairmentList ...
public List<DrugInfluence> ImpairmentList
{
get
{
return impairmentList;
}
set
{
if(impairmentList != value)
{
impairmentList = value;
NotifyPropertyChanged("ImpairmentList");
}
}
}
그리고 나는 CheckListBox 컨트롤에 뷰 모델을 결합하기 위해 사용하고있어 XAML ...
<sdk:CheckListBox Margin="6"
ItemsSource="{Binding ImpairmentList}"
DisplayMemberPath="Impairment"
SelectedMemberPath="IsChecked"
SelectedItemsOverride="{Binding SelectedImpairments, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
</sdk:CheckListBox>
예 즉 컨트롤의 나머지를 구현합니다. 내 접근 방식에 관해서는, 나는 내 ViewModel에서 INotifyPropertyChanged를 구현했으며 DrugInfluence 클래스 자체에서는 구현하지 않았습니다. 저는 당신이 제안한대로 SelectedMemberPath를 내 ViewModel의 DrugInfluence 객체 컬렉션에 대한 IsChecked 속성에 바인딩하려고 할 것이라고 생각했습니다. 인상 이벤트 통지는 돌봐 줄거야 - 내가 이러는거야? – rudeboy
DrugInfluence에서도 INotifyPropertyChanged를 구현해야합니다. ObservableCollection에서 처리 할 수있는 유일한 사항은 항목 소스가 변경된 경우 (즉, 새 목록으로 설정되거나 항목이 추가/제거 된 경우)입니다. 목록의 요소 변경 사항은 자동으로 처리되지 않습니다. – SteveR
IsChecked 속성을 SelectedMemberPath에 바인딩하면 WPF가 해당 속성의 변경 사항을 수신 대기 중입니다. 변경되었음을 알리면 UI 업데이트가 처리됩니다. – SteveR