自定义选择器 C# UWP 上的多项选择
multiple selection on custom picker C# UWP
我一直在论坛和互联网上寻找有关 C# 上的自定义选择器的信息,我有一个已经可以使用的选择器,但我的一些研究告诉我你只能 select 的 1 个项目自定义选择器,这是我用来部署选择器的代码。
选择器
<custom:CustomPicker x:Name="pickerCategories" ItemsSource="{Binding listCategoriesName}" SelectedIndex="{Binding SelectedCategory}" SelectedIndexChanged="pickerCategories_SelectedIndexChanged" Grid.Column="1" BackgroundColor="White"/>
项目源作为数据库中的对象列表提供给选择器
有没有办法能够 select 自定义选择器的多个索引?
例如...
Picker pk = new Picker(); pk.SelectionMode=Multiple;
根据您的要求,您可以在原生 uwp 项目中制作自定义 Picker
渲染器。然后创建一个新的 DataTemplate
用于在本机控件中显示包含复选框的 ComboBox
项。
<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
项目源传递给本机控件 (ComboBox)。当组合框下拉关闭时,您可以执行 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();
}
而且我已经上传了 code sample。请检查。
我一直在论坛和互联网上寻找有关 C# 上的自定义选择器的信息,我有一个已经可以使用的选择器,但我的一些研究告诉我你只能 select 的 1 个项目自定义选择器,这是我用来部署选择器的代码。
选择器
<custom:CustomPicker x:Name="pickerCategories" ItemsSource="{Binding listCategoriesName}" SelectedIndex="{Binding SelectedCategory}" SelectedIndexChanged="pickerCategories_SelectedIndexChanged" Grid.Column="1" BackgroundColor="White"/>
项目源作为数据库中的对象列表提供给选择器 有没有办法能够 select 自定义选择器的多个索引? 例如...
Picker pk = new Picker(); pk.SelectionMode=Multiple;
根据您的要求,您可以在原生 uwp 项目中制作自定义 Picker
渲染器。然后创建一个新的 DataTemplate
用于在本机控件中显示包含复选框的 ComboBox
项。
<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
项目源传递给本机控件 (ComboBox)。当组合框下拉关闭时,您可以执行 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();
}
而且我已经上传了 code sample。请检查。