2016-08-11 2 views

답변

0

예, 가능합니다. 나는 본질적으로 동일한 컨트롤 인 ListView와 비슷한 것을했다. 여기서 트릭을 만드는 것은 FAST입니다. 수천 개의 항목이있는 경우 30 초 정도 걸릴 수 없습니다.

이제 구현 방법은 일반 컨트롤을 만들거나이 개체 유형에 맞게 만들 것인지에 따라 달라집니다. 그 이유는이 작업을 빠르게 수행하기 위해서는 항목 개체의 어떤 속성이 IsChecked인지 알아야하기 때문입니다. 필자는 IsCheckedPath라는 DP를 WPF라는 정신으로 만들었습니다. 그런 다음 컨트롤은 각 개체의 IsCheckedPath 속성을 해당 확인란에 자동 바인딩합니다.

마스터 체크 박스를 토글하면 항목을 반복하고 속성 값을 설정해야합니다. 당신은 2 가지 선택을 할 수 있습니다 : 1) 반사 또는 2) IsCheckedPath DP를 설정할 때 표현 트리를 컴파일하십시오.

리플렉션이 너무 느려서 # 2를 했었습니다.

이 특정 개체에만 관심이 있고 컨트롤을 다시 사용할 수 있다고 생각하지 않는다면 둘 다 건너 뛰고 속성을 설정하면됩니다. IMO가 아니라 일반적인 경로를 선택하는 것이 좋습니다.

또한 WPF 컨트롤 가상화 및 체크 상자가 밖으로 스크롤 된 항목에 대해 "활성"이 아니기 때문에 시각적으로 "바로 가기"를 가져와 다른 쪽에서 확인란을 설정할 수 없습니다 전망.

0

안녕하세요. WPF에 오신 것을 환영합니다! 이 상황에서 찾으시는 내용은 MultiBinding입니다. 마스터 체크 박스는 개별 체크 박스를 변경할 수 있기 때문에 바인딩은 양방향이어야합니다. MultiBinding는 다음과 같이 마스터 확인란에 적용 할 것입니다 :

<Checkbox x:Name="MasterCheckBox"> 
<Checkbox.IsChecked> 
    <MultiBinding Converter="[Instance of your converter class]" Mode="TwoWay"> 
     <Binding Source="ConversationViewModel.ConversationValues" Convert="{StaticResource PersonFilterTypeToBoolConverter}" ConverterParameter="{x:Static shared:MethodType.Mobile}"/> 
     <Binding Source="ConversationViewModel.ConversationValues" Convert="{StaticResource PersonFilterTypeToBoolConverter}" ConverterParameter="{x:Static shared:MethodType.Skype}"/> 
     <Binding Source="ConversationViewModel.ConversationValues" Convert="{StaticResource PersonFilterTypeToBoolConverter}" ConverterParameter="{x:Static shared:MethodType.Landline}"/> 
    </MultiBinding> 
</Checkbox.IsChecked> 

또한 변환기를 만들어야합니다. 위에 링크 된 기사는 간단한 변환기를 만드는 방법을 설명합니다. 귀하의 경우에는 바인딩이 양방향이므로 변환 및 ConvertBack 메서드를 모두 처리해야합니다. ConvertBack 메서드는 사용자가 마스터 확인란을 변경할 때 실행되므로 멀티 바인딩 아래의 모든 바인딩을 true 또는 false로 설정해야합니다. Convert 메서드는 개별 확인란 중 하나가 변경되면 실행됩니다. 이 경우 WPF에서는 모든 개별 상자가 선택되어 있으면 마스터 확인란의 IsChecked를 true로 설정하고, 모든 개별 상자가 선택되어 있지 않으면 false로 설정하고 혼합되어 있으면 IsChecked가 null이어야합니다. 해당 속성의 유형이 bool이므로 IsChecked는 null 일 수 있습니까? (nullable bool)은 WPF에서 3 상태 체크 박스가 작동하는 방식입니다.

+0

이것은 내 문제를 해결하지 못했지만 IValueConverter로 좁혔지만 지금부터 IValueConverter를 추가하는 방법을 잘 모르겠습니다. –