使用 SelectionMode="Multiple" 和 BindableSelection 扩展绑定嵌套 ListBox 中的选定项
Binding selected items in nested ListBox with SelectionMode="Multiple" and BindableSelection extension
我正在使用 MVVM 模式开发 Windows Phone 8.1 应用程序(我使用 Prism 作为框架)
目标是在几个列表中获取所选项目,例如:
我关注XAML:
<ListView
x:Name="abc"
ItemsSource="{Binding Symbols}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<ListBox
SelectionMode="Multiple"
ItemsSource="{Binding List}"
Extensions:ListViewExtensions.BindableSelection="{Binding SelectedItems, ElementName=abc, Mode=TwoWay}">
...
在 ViewModel 中:
public List<SymbolsGroupViewModel> Symbols {
get { return _symbols ?? (_symbols = _dataService.Symbols.GetGroupViewModels()); }
set { _symbols = value; }
}
其中 class SymbolsGroupViewModel
看起来像这样:
public class SymbolsGroupViewModel : ViewModel
{
private readonly INavigationService _navigationService;
private readonly DataService _dataService;
private ObservableCollection<Symbol> _selectedItems = new ObservableCollection<Symbol>();
public SymbolsGroupViewModel(INavigationService navigationService, DataService dataService)
{
_navigationService = navigationService;
_dataService = dataService;
}
public SymbolsGroupViewModel() { }
public Symbol Header { get; set; }
public List<Symbol> List { get; set; }
public ObservableCollection<Symbol> SelectedItems
{
get { return _selectedItems; }
set { SetProperty(ref _selectedItems, value); }
}
}
它应该使用来自 WinRT XAML 工具包的 BindableSelection
扩展,如下所示:
它适用于非嵌套列表,但是当我将解决方案调整为嵌套列表时,SelectedItems
列表包含 0 个元素。
有人知道是否可以在嵌套列表中使用此扩展吗?如果可以,我做错了什么?
感谢您的帮助。
我已经找到错误所在,所以我会留下答案以防有人遇到类似问题...
在嵌套列表中,绑定应该如下所示:
Extensions:ListBoxExtensions.BindableSelection="{Binding SelectedItems, Mode=TwoWay}"
- 给那里
ElementName
是个坏主意
- 我以前没有注意到,每种列表都有单独的扩展名。就我而言,我应该使用
ListBoxExtensions
.
希望这对以后的人有所帮助。
我正在使用 MVVM 模式开发 Windows Phone 8.1 应用程序(我使用 Prism 作为框架)
目标是在几个列表中获取所选项目,例如:
我关注XAML:
<ListView
x:Name="abc"
ItemsSource="{Binding Symbols}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<ListBox
SelectionMode="Multiple"
ItemsSource="{Binding List}"
Extensions:ListViewExtensions.BindableSelection="{Binding SelectedItems, ElementName=abc, Mode=TwoWay}">
...
在 ViewModel 中:
public List<SymbolsGroupViewModel> Symbols {
get { return _symbols ?? (_symbols = _dataService.Symbols.GetGroupViewModels()); }
set { _symbols = value; }
}
其中 class SymbolsGroupViewModel
看起来像这样:
public class SymbolsGroupViewModel : ViewModel
{
private readonly INavigationService _navigationService;
private readonly DataService _dataService;
private ObservableCollection<Symbol> _selectedItems = new ObservableCollection<Symbol>();
public SymbolsGroupViewModel(INavigationService navigationService, DataService dataService)
{
_navigationService = navigationService;
_dataService = dataService;
}
public SymbolsGroupViewModel() { }
public Symbol Header { get; set; }
public List<Symbol> List { get; set; }
public ObservableCollection<Symbol> SelectedItems
{
get { return _selectedItems; }
set { SetProperty(ref _selectedItems, value); }
}
}
它应该使用来自 WinRT XAML 工具包的 BindableSelection
扩展,如下所示:
它适用于非嵌套列表,但是当我将解决方案调整为嵌套列表时,SelectedItems
列表包含 0 个元素。
有人知道是否可以在嵌套列表中使用此扩展吗?如果可以,我做错了什么?
感谢您的帮助。
我已经找到错误所在,所以我会留下答案以防有人遇到类似问题...
在嵌套列表中,绑定应该如下所示:
Extensions:ListBoxExtensions.BindableSelection="{Binding SelectedItems, Mode=TwoWay}"
- 给那里
ElementName
是个坏主意 - 我以前没有注意到,每种列表都有单独的扩展名。就我而言,我应该使用
ListBoxExtensions
.
希望这对以后的人有所帮助。