UWP使用x的最佳方法:绑定和过滤ObservableCollection

时间:2017-12-13 13:44:07

标签: c# xaml mvvm uwp observablecollection

我有一个UWP应用程序。

一个带 pivot 控件的视图。

一个相关的ViewModel。

这样的一个模型:

class Model
{
    public int Category { get; set; }
}

在ViewModel中,有一个模型“模型”的ObservableCollection,如:

public ObservableCollection<Model> models = new ObservableCollection<Model>();

我想在pivotitem中使用每个模型按类别在枢轴控件中显示模型。例如,PivotItem 1将计算所有具有类别1的模型,PivotItem 2将计算所有具有类别2的模型等...

解决方案是为按类别过滤的每个模型创建新的ObservableCollection,但在我看来这个解决方案仍然有点沉重。举例来说:

public ObservableCollection<Model> modelCategory1 = models.Where(x => x.category == 1) [...]

这就是为什么我想知道是否没有直接来自XAML的解决方案来过滤。

编辑:

在他看来,在Pivot中,我有5个pivotitems,每个包含一个ListView

<Pivot>
    <PivotItem>
        <ListView ItemsSource="{x:Bind ViewModel.Models}" />
    </PivotItem>
    <PivotItem>
        <ListView ItemsSource="{x:Bind ViewModel.Models}" />
    </PivotItem>
    <PivotItem>
        <ListView ItemsSource="{x:Bind ViewModel.Models}" />
    </PivotItem>
    <PivotItem>
        <ListView ItemsSource="{x:Bind ViewModel.Models}" />
    </PivotItem>
    <PivotItem>
        <ListView ItemsSource="{x:Bind ViewModel.Models}" />
    </PivotItem>
</Pivot>

编辑2:

根据这个Can I filter a collection from xaml?和这个:[UWP]CollectionViewSource Filter?我无法从UWP过滤CollectionViewSource,所以我想我必须创建新的ObservableCollection,其中包含Filter结果,如:

private ObservableCollection<Model> _modelsCategory1; 
public ObservableCollection<Model> ModelsCategory1
{ 
    get { return _modelsCategory1; } 
    set { _modelsCategory1= value; NotifyPropertyChanged(); 
} 

和:

var cat1 = from fobjs in Models 
         where fobjs.Category == 1 
         select fobjs;
ModelsCategory1  = new ObservableCollection<Model>(cat1);

1 个答案:

答案 0 :(得分:0)

在现有代码中执行此操作,将类别属性绑定到ListViewItem,

<PivotItem>
    <ListView ItemsSource="{x:Bind ViewModel.Models}">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="data:Model">
                <TextBlock Text="{x:Bind Category}"/>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</PivotItem>