我正在开发一个带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; }
}
类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 Toolkit中的BindableSelection
扩展名,如下所示:
https://stackoverflow.com/a/25430935/5194338
它适用于非嵌套列表,但是当我将解决方案调整为嵌套列表时,SelectedItems
列表包含0个元素。
有人知道是否可以在嵌套列表中使用此扩展名,如果是,我做错了什么?
感谢您的帮助。
答案 0 :(得分:0)
我发现错误在哪里,所以我会留下答案以防万一有类似的问题......
在嵌套列表中,绑定应该写成如下:
Extensions:ListBoxExtensions.BindableSelection="{Binding SelectedItems, Mode=TwoWay}"
ElementName
是一个坏主意ListBoxExtensions
。希望这将有助于将来。