서비스의 일부 옵션을 제시하고 사용자로부터 이러한 항목 중 일부를 선택해야하는 애플리케이션을 개발 중입니다. 이를 달성하기 위해, ListView를 SelectionMode = "Multiple"과 함께 사용하려고 시도했지만이 접근법에 몇 가지 문제점을 발견했습니다. 좌측 패널 (I "는 슬롯 '라고한다 여기에서) 사용자가 항목을 선택 위 그림 UWP 다중 선택을 처리하는 방법
는, 선택된 슬롯의 상세 우측 패널에 도시되어있다. 내 문제는 "처리 유형"필드 다루는 온다. 보시다시피, 슬롯에는 많은 핸들링 유형이있을 수 있습니다. ListView의 SelectedItems 속성을 내 ViewModel의 일부 속성에 양방향 바인딩 할 필요가 있지만 이는 불가능합니다 (그런데 MVVM 패턴을 따르고 있습니다). ViewModel에서 선택한 항목을 설정 한 다음 사용자가 내 ViewModel로 되돌릴 수 있었던 다른 선택 (또는 선택 취소)을 캡처하는 방법이 있습니다. 물론 깨끗한 쉬운 솔루션을 선호하지만,이 시점에서 어떤 제안도 인정 될 것입니다.
0
A
답변
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로 설정할 수 있습니다. 그런 다음 DataTemplate
에 CheckBox
컨트롤을 추가하면 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
은리스트 뷰의에서 selectionChanged 이벤트를 사용하여 생각 해 봤나? 보이는 것부터 보면 selectionChanged 이벤트 태스크처럼 보입니다. 그렇지 않다면 데모 샘플 앱이나 코드 또는 GIF 또는 YouTube에서 얻으려는 동영상에 대한 정교함을 제공하거나 제공 할 수 있습니까? –