我一直在论坛和互联网上查看关于C#的自定义选择器,我有一个选择器已经正常运行,但我的一些研究告诉我你只能选择1项自定义选择器,这是用于部署选择器的代码。
选取器
<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 :(得分:0)
根据您的要求,您可以在本机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。请检查。