내가 WPF 응용 프로그램 (.NET 4.0) 건물입니다을 selectedItem을하고, 나는 다음과 같은 상황이 :리스트 박스의 ItemSource가 바인딩WPF/MVVM 바인딩 확인란 재산
<ListBox
ItemsSource="{Binding Path=Items}"
SelectedItem="{Binding Path=SelectedItem}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Height" Value="48"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel>
<!-- ... -->
<CheckBox>
<CheckBox.IsChecked>
<!-- Something here that behaves like SelectedItem binding -->
</CheckBox.IsChecked>
</CheckBox>
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
- 을 ObservableCollection <>를 참조하십시오. 리스트 박스의
- selectedItem 그는 뷰 모델의 속성 selectedItem가 결합된다.
그러나 ViewModel.SelectedItem이 업데이트되면 장기 실행 (2-3 초) 비동기 작업 비트가 시작됩니다. 목록 상자에서 다른 항목을 선택하여 비동기 작업의 많은 수를 대기열에 넣기가 너무 쉽습니다. 대신 ViewModel.SelectedItem을 CheckBox (ItemTemplate에 포함됨)에 바인딩하려고합니다.
저는 WPF에 상당히 익숙하지만, Forms에서 이벤트 처리기를 연결하고 이벤트를 트리거 한 항목을 제외하고 프로그래밍 방식으로 속성을 업데이트하는 모든 길고 못생긴 코드를 작성했습니다.
WPF에서는 ValueConverter를 사용하는 방법을 살펴 보았지만 상위 뷰 모델 (ObservableCollection <>)에 바인딩하는 방법을 알아낼 수 없습니다.
비슷한 요구 사항이있는 사람이 있다면 정말 도움이 될 것입니다.
건배!
./Fredrik
는 않을 것 체크 박스를 반복적으로 클릭하여 많은 수의 비동기 작업을 대기열에 묶는 것도 똑같이 간단합니까?당신이 필요로하는 것은 새로운 것이 시작될 때 현재 실행중인 작업을 취소하는 메커니즘입니다. 그리고 선택한 항목이 변경 될 때 바로 작업하는 대신 작업을 지연하는 것을 고려할 수 있습니다. – Clemens
안녕하세요 클레멘스, 응답 해 주셔서 감사합니다! 그렇습니다. 그러나 비동기 작업이 실행되는 동안은 선택된 상태로의 변경을 막기가 너무 어렵지 않아야합니다. 작업이 실행 중일 때 ListBox를 비활성화하여 동일한 작업을 시도했지만 너무 추했습니다. 추가 된 CheckBox의 이점은 ListBox 내의 선택 항목이 작업과 분리되어있어 사용자가 작업이 실행되는 동안 목록 상자를 둘러 볼 수 있다는 점입니다. – Fredrik
목록 상자 외부에있는 모든 확인란 대신 전용 버튼을 사용하여 현재 선택된 항목에서 작업을 시작할 수도 있습니다. 이는 구현이 쉬울뿐만 아니라보다 직관적 인 UI로 이어질 수 있습니다. – Clemens