【问题标题】:Filter Listview Using MVVM in Uwp在 Uwp 中使用 MVVM 过滤 Listview
【发布时间】:2016-11-09 14:07:35
【问题描述】:

查看

<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) 中有一个名为 _billList 的集合。该集合包含 Bill_Type、Bill_Status 和 Bill_Date。在这里我需要在列表视图中做一个过滤器。我在集合中有 Bill_Status 的值,例如(“是”和“否”)。如果我检查了第一个单选按钮,那么具有 Bill_Status = "Yes" 的行应该绑定到列表视图。如果选中第二个单选按钮,则 Bill_Status = "No" 行应绑定到列表视图。如何在uwp中这样做?请帮助我。

【问题讨论】:

    标签: c# mvvm uwp


    【解决方案1】:

    完成这项工作的最快方法是使用 Linq 过滤您的集合并将结果传递给您的 observable 集合。

    要做到这一点,您需要保留原始集合的所有值,您可以使用这些值进行 Linq 过滤。

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

    【讨论】:

    • 是的@Depechie。但是Fiting集合之后,如何保留旧集合?还必须将过滤后的集合绑定到列表视图。但 Listview itemssource 属性仅具有旧集合的绑定。那么如何在运行时将其更改为绑定到过滤集合??
    • 您保留一个私有变量,即完整的未过滤集合,第一次将所有这些项目添加到数据绑定到屏幕的可观察集合中。之后,当您需要过滤时,清除 observable 集合并将作为 Linq 过滤器结果的那些项目添加到私有变量(保存完整列表)
    • 好的@Depechie。我已经完成了任务并且运行良好。如果您可以编辑视图模型并将代码与您的答案一起发布。
    猜你喜欢
    • 2011-05-26
    • 2017-03-06
    • 2017-10-30
    • 2017-10-11
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    相关资源
    最近更新 更多