在Uwp中使用MVVM过滤Listview

时间:2016-11-09 14:07:35

标签: c# mvvm uwp

查看

<StackPanel>
    <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Row="2">
        <RadioButton Content="Verified" IsChecked="{Binding Path=RadioAChecked,Mode=TwoWay}" Foreground="{StaticResource foretwo}"/>
        <RadioButton Content="Not Verified" IsChecked="{Binding Path=RadioBChecked,Mode=TwoWay}" Foreground="{StaticResource foretwo}"/>
    </StackPanel>
    <ListView ItemsSource="{Binding BillList}">
    <ListView.ItemTemplate>
        <DataTemplate>
           <StackPanel>
              <TextBlock Text="{Binding Bill_Type}" Style="{StaticResource textblock}"/>
              <TextBlock Text="{Binding Bill_Status}" Style="{StaticResource textblock}"/>
              <TextBlock Text="{Binding Bill_Date}" Style="{StaticResource textblock}"/>
           </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
    </ListView>
</StackPanel> 

视图模型

 public class BillViewModel : BindableBase
{
   IBillDataServices _service;
    public BillViewModel(IBillDataServices service)
    {
        _service = service;
        _billList = _service.GetAllBill();
    }

    private ObservableCollection<BillModel> _billList;

    public  ObservableCollection<BillModel> BillList
    {
        get
        {
            return _billList;
        } 
        set
        {
            _billList = value;
            RaisePropertyChanged("BillList");
        }
    } 

    private bool _radioAChecked;

    public bool RadioAChecked
    {
        get { return _radioAChecked;  }
        set
        {
            if (_radioAChecked == true)
            {

            }
        }
    } 

    private bool _radioBChecked;
    public bool RadioBChecked
    {
        get { return _radioBChecked; }
        set
        {
            _radioBChecked = true;
            if (_radioBChecked == true)
            {


            }
        }
    }

我的viewmodel(ViewModel)中有一个名为_billList的集合。该集合包含Bill_Type,Bill_Status和Bill_Date。在这里,我需要在listview中进行过滤。我在集合中有Bill_Status的值(“是”和“否”)。如果我检查了第一个radiobutton,那么具有Bill_Status =“Yes”的行应该绑定到listview。如果选中第二个radiobutton,那么Bill_Status =“No”行应该绑定到listview。如何在uwp中这样做?请帮助我。

1 个答案:

答案 0 :(得分:0)

完成此任务的最快方法是使用Linq过滤您的集合并将结果传递给您的可观察集合。

为了实现这一目标,您需要保留原始集合的所有值,您可以使用它们进行Linq过滤。

过滤后,将结果设置为可观察集合。