2017-11-07 3 views
0

C#에서 사용자 지정 선택기에 대한 포럼 및 인터넷을 찾고 있었지만 이미 피커가 작동하지만 일부 연구에서는 사용자가 선택한 항목 중 하나만 선택할 수 있습니다. 사용자 지정 Picker, 이것은 picker를 배포하는 데 사용하는 코드입니다.사용자 지정 선택기에서 다중 선택 C# UWP

피커

<custom:CustomPicker x:Name="pickerCategories" ItemsSource="{Binding listCategoriesName}" SelectedIndex="{Binding SelectedCategory}" SelectedIndexChanged="pickerCategories_SelectedIndexChanged" Grid.Column="1" BackgroundColor="White"/> 

항목 소스는 사용자 선택 도구의 여러 인덱스를 선택할 수있는 방법이 데이터베이스 에서 개체의 목록으로 선택기에 주어집니다? 예를 들어 ...

Picker pk = new Picker(); pk.SelectionMode=Multiple; 

답변

0

당신 요구를 들어, 기본 UWP 프로젝트에서 사용자 지정 Picker 렌더러를 만들 수 있습니다. 그리고 네이티브 컨트롤에 체크 박스가 포함 된 ComboBox 항목을 표시하기위한 새 DataTemplate을 만듭니다.

<DataTemplate x:Key="templateEmployee" > 
    <StackPanel Orientation="Horizontal"> 
     <CheckBox Content="{Binding Content,Mode=TwoWay}" IsChecked="{Binding IsCheck,Mode=TwoWay}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
    </StackPanel> 
</DataTemplate> 

CustomPickerRenderer를 들어, 양식을 기본 컨트롤 (콤보)에 Picker 항목 소스를 통과해야한다. 그리고 콤보 박스가 닫히면, InvokeAction 메서드를 실행하여 Data 양식을 Picker 양식으로 보낼 수 있습니다.

public class CustomPickerRenderer : PickerRenderer 
{ 
    protected override void OnElementChanged(ElementChangedEventArgs<Picker> e) 
    { 
     base.OnElementChanged(e); 
     Control.ItemsSource = e.NewElement.ItemsSource; 
     Control.ItemTemplate = (Windows.UI.Xaml.DataTemplate)App.Current.Resources["templateEmployee"]; 
     Control.DropDownClosed += Control_DropDownClosed; 

    } 

    private void Control_DropDownClosed(object sender, object e) 
    { 
     var NewElement = Element as CustomPicker; 
     var items = (sender as ComboBox).ItemsSource; 
     NewElement.InvokeAction(items); 
    } 

} 

사용

public MainPage() 
{ 
    InitializeComponent(); 
    MyPicker.ItemsSource = new MainViewModel().itemSource; 
    MyPicker.RegisterAction(IsCheckItems); 
} 
private List<Item> SelecItms = new List<Item>(); 
private void IsCheckItems(object data) 
{ 
    var items = data as ObservableCollection<Item>; 
    var str = new StringBuilder(); 
    foreach (var item in items) 
    { 
     if (item.IsCheck) 
     { 
      SelecItms.Add(item); 
      str.AppendLine(item.Content); 
     } 
    } 
    SeleitemLabel.Text = str.ToString(); 
} 

enter image description here

그리고 나는 code sample을 업로드했습니다. 확인해주십시오.

+0

정말 유용했습니다. 내 문제를 해결할 수있었습니다! –

관련 문제