당신 요구를 들어, 기본 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();
}
그리고 나는 code sample을 업로드했습니다. 확인해주십시오.
정말 유용했습니다. 내 문제를 해결할 수있었습니다! –