【发布时间】:2015-11-08 09:04:36
【问题描述】:
绑定到 ListView 的 ObservableCollection 是否有可能返回 仅经过过滤的 Items 子集,同时保留 双向绑定?那么当我添加/删除项目时,更改会反映到 UI 上吗?
基本上,我有一个 AllItems ObservableCollection 和绑定在第二个 ListView 级别的 FilteredItems ObservableCollection。添加/删除项目时,AllItems 是已更改的项目,但 FilteredItems 引用它并根据特定过滤器获取项目子集。
我有 2 个嵌套的 ListView。它看起来像这样:
<ListView ItemsSource="{Binding Path=Seats}"
SelectedItem="{Binding Path=SelectedSeat, Mode=TwoWay}">
<ListView.ItemTemplate>
<DataTemplate>
<ListView x:Name="ListView_CheckItems" IsSwipeEnabled="False"
ItemsSource="{Binding Path=CheckItemsSeatsDisplayCollection}"
SelectedItem="{Binding Path=SelectedCheckItem,
Mode=TwoWay}"
SelectionMode="Single"
Grid.Column="1">
</ListView>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid Orientation="Horizontal" MaximumRowsOrColumns="1" ></WrapGrid>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
我的主视图模型如下所示:
public class ParentViewModel
{
private ObservableCollection<SeatsViewModel> _Seats = null;
public ObservableCollection<SeatsViewModel> Seats
{
get
{
return _Seats;
}
set
{
_Seats = value;
}
}
private ObservableCollection<CheckItemsViewModel> _AllCheckItems = null;
public ObservableCollection<CheckItemsViewModel> AllCheckItems
{
get
{
return _AllCheckItems;
}
set
{
_AllCheckItems = value;
}
}
}
我的 SeatsViewModel 看起来像这样:
public class SeatsViewModel
{
public int SeatNumber {get;set;}
public ObservableCollection<CheckItemsViewModel> _CheckItemsSeatsDisplayCollection
{
get
{
//I want to return only a subset of the items in AllCheckItems
//return ParentViewModel.Instance.AllCheckItems.Where(c => c.SeatNumber.Equals(SeatNumber));
}
}
}
我无法执行 LINQ 查询并返回它,因为它返回 IEnumerable 并且在绑定时不会跟踪更改。
我做错了什么/有没有其他方法可以实现我想要实现的目标?
谢谢!
【问题讨论】:
标签: c# listview filter windows-store-apps