gpt4 book ai didi

c# - 如何在绑定(bind)到列表上设置选择条件?

转载 作者:太空宇宙 更新时间:2023-11-03 20:12:02 25 4
gpt4 key购买 nike

我是 WPF 的新手,正在尝试使用绑定(bind)。我设法将 Binding 设置为 List 以便显示,例如,网格中的人员列表。我现在想要的是在绑定(bind)上设置一个条件,并只从网格中选择满足此条件的人。到目前为止我所拥有的是:

// In MyGridView.xaml.cs
public class Person
{
public string name;
public bool isHungry;
}

public partial class MyGridView: UserControl
{
List<Person> m_list;
public List<Person> People { get {return m_list;} set { m_list = value; } }

public MyGridView() { InitializeComponent(); }
}

// In MyGridView.xaml

<UserControl x:Class="Project.MyGridView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<DataGrid Name="m_myGrid" ItemsSource="{Binding People}" />
</Grid>
</UserControl>

我现在想要的是只在列表中包含 Person 饥饿的实例。我知道一种在代码中执行此操作的方法,例如添加一个新属性:

public List<Person> HungryPeople
{
get
{
List<Person> hungryPeople = new List<Person>();
foreach (Person person in People)
if (person.isHungry)
hungryPeople.Add(person);
return hungryPeople;
}
}

然后将绑定(bind)更改为 HungryPeople。但是,我认为这不是一个很好的选择,因为它涉及创建额外的公共(public)属性,这可能是不可取的。有没有办法在 XAML 代码中完成所有这些?

最佳答案

使用 CollectionViewSource带过滤器:

绑定(bind):

<UserControl x:Class="Project.MyGridView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<CollectionViewSource x:key="PeopleView" Source="{Binding People} Filter="ShowOnlyHungryPeople" />
</UserControl.Resources>
<Grid>
<DataGrid Name="m_myGrid" ItemsSource="{Binding Source={StaticResource PeopleView}}" />
</Grid>
</UserControl>

过滤器:

private void ShowOnlyHungryPeople(object sender, FilterEventArgs e)
{
Person person = e.Item as Person;
if (person != null)
{
e.Accepted = person.isHungry;
}
else e.Accepted = false;
}

关于c# - 如何在绑定(bind)到列表上设置选择条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19427522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com