使用ArcGIS Pro SDK 2.6,我试图创建一个列表框,用户可以选择超过1个项目(按住shift / Ctrl键+点击)
我可以创建listbox并处理{ItemSource Binding}(用于更新列表)和{SelectedItem Binding}来处理具有的情况一项点击,使用RelayCommand()。
如何将窗格列表框项配置为允许多行选择?
谢谢你!
为了启用shift/control修饰符的多重选择,我们只需要在关联XAML文件中的ListBox控件的属性中设置SelectionMode="Extended"。
参见Microsoft参考:https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.listbox?view=net-5.0#remarks
欢呼,
詹姆斯
你可以用xaml中的isselected属性绑定UI
< /列表框>
因此,在上面的例子中,在您的模型中,应该有一个布尔类型的属性调用IsSelected。
private bool _isSelected;public bool IsSelected {get {return _isSelected;} set {_isSelected = value;this.NotifyPropertyChanged ();}}
从您的中继命令,您可以访问选定的项目通过
物品。Where(i => i. isselected);
列表框控件中没有SelectedItems属性,但您可以扩展它以启用它。
下面是自定义列表框控件类的例子,可以绑定illist集合类型。(任何可以使用的对象列表)
但是我建议你使用他的选择属性方法,因为它更直接。
使用系统;使用System.Collections;使用System.Collections.Generic;使用来;使用text;使用System.Threading.Tasks;使用System.Windows;使用System.Windows.Controls;名称空间ThanExtendControlLibrary。ExtendedControls{公共类CustomListBox: ListBox{公共CustomListBox(){这个。SelectionChanged += CustomListbox_SelectionChanged; } private void CustomListbox_SelectionChanged(object sender, SelectionChangedEventArgs e) { this.SelectedItemsList = this.SelectedItems; } #region SelectedItemsList public IList SelectedItemsList { get { return (IList)GetValue(SelectedItemsListProperty); } set { SetValue(SelectedItemsListProperty, value); } } public static readonly DependencyProperty SelectedItemsListProperty = DependencyProperty.Register("SelectedItemsList", typeof(IList), typeof(CustomListBox), new PropertyMetadata(null)); #endregion } }
与上面的扩展控件一样,您可以在dockpane中使用它
添加xmlns:local="clr-namespace: ThanExtendControlLibrary.ExtendedControls;assembly=[您的assemblyname]:
你看到的那个误差属性“SelectedItems”没有可访问的setter。与SelectedItem属性不同的是,SelectedItems属性是只读的。
我能想到的最简单的方法是在代码隐藏中处理ListBox的SelectionChanged事件,以便在视图模型中执行命令,并将选中的项从事件处理程序传递给命令。
以DockpaneSimple项目为例,这将涉及以下更改-
BookmarkDockpaneViewModel.cs
//添加到#区域私有属性私有ICommand _retrieveSelectedBookmarksCommand;//添加到#区域公共属性公共ICommand RetrieveSelectedBookmarksCommand => _retrieveSelectedBookmarksCommand;//添加到BookmarkDockpaneViewModel()构造器_retrieveSelectedBookmarksCommand = new RelayCommand((selectedBookmarks) => RetrieveSelectedBookmarks(selectedBookmarks), () => true);//添加到#区域私人助手私人无效RetrieveSelectedBookmarks(对象参数){System.Collections.IList selectedItems = (System.Collections.IList)参数;Debug.WriteLine (selectedItems.Count);}
BookmarkDockpane.xaml.cs
//添加到公共部分类BookmarkDockpaneView: UserControl私有void lstBox_OnSelectionChanged(对象发送方,SelectionChangedEventArgs e) {var listSelectedItems = ((ListBox)发送方).SelectedItems;var vm = (BookmarkDockpaneViewModel)this.DataContext;vm.RetrieveSelectedBookmarksCommand.Execute (listSelectedItems);}
BookmarkDockpane.xaml
<网格列表框。行= " 1 "网格。网格列= " 0 "。ColumnSpan="2" Name="LstBookmarks" SelectionMode="Extended" ItemsSource="{Binding ListOfBookmarks}" Margin="5" DisplayMemberPath="Name" SelectionChanged ="lstBox_OnSelectionChanged" BorderBrush="{DynamicResource Esri_BorderBrush}" BorderThickness="2" ItemContainerStyle="{DynamicResource Esri_ListBoxItemHighlightBrush}"/>