2017-05-09 1 views
0

서비스의 일부 옵션을 제시하고 사용자로부터 이러한 항목 중 일부를 선택해야하는 애플리케이션을 개발 중입니다. 이를 달성하기 위해, ListView를 SelectionMode = "Multiple"과 함께 사용하려고 시도했지만이 접근법에 몇 가지 문제점을 발견했습니다. 좌측 패널 (I "는 슬롯 '라고한다 여기에서) 사용자가 항목을 선택 위 그림 UWP 다중 선택을 처리하는 방법

Application picture

는, 선택된 슬롯의 상세 우측 패널에 도시되어있다. 내 문제는 "처리 유형"필드 다루는 온다. 보시다시피, 슬롯에는 많은 핸들링 유형이있을 수 있습니다. ListView의 SelectedItems 속성을 내 ViewModel의 일부 속성에 양방향 바인딩 할 필요가 있지만 이는 불가능합니다 (그런데 MVVM 패턴을 따르고 있습니다). ViewModel에서 선택한 항목을 설정 한 다음 사용자가 내 ViewModel로 되돌릴 수 있었던 다른 선택 (또는 선택 취소)을 캡처하는 방법이 있습니다. 물론 깨끗한 쉬운 솔루션을 선호하지만,이 시점에서 어떤 제안도 인정 될 것입니다.

+0

은리스트 뷰의에서 selectionChanged 이벤트를 사용하여 생각 해 봤나? 보이는 것부터 보면 selectionChanged 이벤트 태스크처럼 보입니다. 그렇지 않다면 데모 샘플 앱이나 코드 또는 GIF 또는 YouTube에서 얻으려는 동영상에 대한 정교함을 제공하거나 제공 할 수 있습니까? –

답변

0

UWP의 읽기 전용 속성 SelectedItems에는 Binding을 할당 할 수 없습니다.

wrokaround로 클래스에 IsSelected 속성을 정의 할 수 있습니다. 클래스는 INotifyPropertyChanged를 상속해야합니다.

클래스 코드 :

public class Bundle : INotifyPropertyChanged 
{ 
    private string _name; 
    private bool _isSelected; 

    public string Name 
    { 
     get { return _name; } 
     set 
     { 
      _name = value; 
      RaisePropertyChanged("Name"); 
     } 
    } 

    public bool IsSelected 
    { 
     get { return _isSelected; } 
     set 
     { 
      _isSelected = value; 
      RaisePropertyChanged("IsSelected"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected void RaisePropertyChanged(string name) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(name)); 
     } 
    } 
} 

우리는 CheckBox이 표시되지 않습니다 IsMultiSelectCheckBoxEnabled false로 설정할 수 있습니다. 그런 다음 DataTemplateCheckBox 컨트롤을 추가하면 IsChecked 속성을 IsSelected에 바인딩 할 수 있습니다. 예를 들어

는 :

<ListView Name="MyListView" SelectionMode="Multiple" IsMultiSelectCheckBoxEnabled="False"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <CheckBox IsChecked="{Binding IsSelected,Mode=TwoWay}"></CheckBox> 
       <TextBlock Text="{Binding Name}" ></TextBlock> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

이 방법을 사용하면 SelectionMode 및 IsMultiSelectCheckBoxEnabled 특성이 불필요한 것처럼 보이지만 꽤 잘 작동합니다. – Wacho

관련 문제