C# WPF-根据其他控件更改绑定数据
我正在尝试使用WPF进行实验,所以我创建了一些测试窗口来查看它是如何运行的。 我得到了一个窗口,其中包含一个带有一些选项的组合框,窗口中有一个数据网格,它绑定到组合框所选项目列表的属性,这意味着当您在组合框中选择一个项目时,数据网格会相应地更新C# WPF-根据其他控件更改绑定数据,c#,wpf,data-binding,datagrid,C#,Wpf,Data Binding,Datagrid,我正在尝试使用WPF进行实验,所以我创建了一些测试窗口来查看它是如何运行的。 我得到了一个窗口,其中包含一个带有一些选项的组合框,窗口中有一个数据网格,它绑定到组合框所选项目列表的属性,这意味着当您在组合框中选择一个项目时,数据网格会相应地更新 <DataGrid Grid.Row="1" AutoGenerateColumns="True" ItemsSource="{Binding ElementName=comboBoxPeople,
<DataGrid Grid.Row="1" AutoGenerateColumns="True"
ItemsSource="{Binding ElementName=comboBoxPeople,
Path=SelectedItem.OrdersList}"/>
我在窗口中添加了一个复选框和一个文本框,我想使用它们来过滤数据网格中的一些行。该复选框确定是否存在任何过滤,过滤本身根据文本框中的文本完成
如何使用复选框和文本框过滤DataGrid的行?我知道我可以制作一个带有多重绑定的多值转换器,并返回我想要的DataGrid的新ItemsSource,但我正在寻找其他解决方案。AllItems您可以将包含DataGrid行的对象的筛选器属性绑定到复选框和文本框。每次更新这些属性时,您也会更新筛选。 另外,您可以实现INotifyPropertyChanged接口,并在每次DataGrid行列表更改时引发PropertyChanged事件 绑定到的类的外观如下所示:
class Class1 : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private List<OrderItem> allItems;
private string textBoxValue;
public string TextBoxValue
{
get { return textBoxValue; }
set
{
textBoxValue = value;
updateList();
}
}
private List<OrderItem> orderItems;
private List<OrderItem> OrderItems
{
get { return orderItems; }
set
{
orderItems= value;
PropertyChanged(this, new PropertyChangedEventArgs("OrderItems"));
}
}
private void updateList()
{
List<OrderItem> newList = new List<OrderItem>();
//update the List
foreach (OrderItem orderItem in allItems)
{
if (orderItem[name] == textBoxValue) newList.Add(orderItem);
}
OrderItems= newList;
}
}
但是,数据网格本身如何显示新线呢?DataGrid的ItemsSource是否应该绑定到DataGridItems属性?但它已经绑定到组合框。另外,如何在updateList方法中获取DataGrid中的当前行,以便对它们进行过滤?数据网格已经保存了一些行,我希望能够执行类似if line[name]!=文本框。文本然后过滤行如果我理解正确,组合框的每个项目都有一个OrdersList,并且您希望使用文本框和复选框过滤此列表。您可以通过使用ComboBox元素列表并将文本框和复选框绑定到所选元素来实现这一点。一旦引发PropertyChanged事件,DataGrid将再次获取OrderItems并显示新行,在我接受它之前只显示一件事。。。目前的解决方案是修改原始列表。我想保持它的完整性,只过滤数据网格本身的显示,也就是说,只过滤其行。有没有一种方法可以在不使用两个列表的情况下执行此操作?一个用于原始列表以在我不想筛选时还原它,另一个用于数据网格显示?好的,这是最简单的方法,因为列表只包含引用,所以内存中没有太多开销