2017-11-07 15 views
0

私はC#のカスタムピッカーについてフォーラムやインターネットを見てきましたが、ピッカーは既に機能していますが、私の研究の中には、カスタムピッカー、これはピッカーを配置するために使用するコードです。カスタムピッカーの複数選択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

本当に役に立ちました、私は私の問題を解決することができました! –