c# - 基于 TextBoxes 和 CheckBoxes MVVM 过滤 WPF DataGrid
问题描述
我希望让它自己工作,但看起来我仍然缺少一些东西。我有 4 个用于过滤 WPF DataGrid 的文本框。除了它们之外,我还有 2 个复选框。
目前我没有收到任何错误,但是
- 我只能选中 CheckBox,不能取消选中。
如果两个复选框都被选中=“应用过滤器”并且值被输入到 YRNRO“应用更多过滤器”=“输入值”到其他文本框什么都不做。过滤器是否因此而变得混乱?
string ACTIVEBoolquery = ACTIVEBool ? "AND YRNRO Like '6%' OR YRNRO Like '7%'" : ""; this.MainDataTable.DefaultView.RowFilter = $"YRNRO LIKE '{this.YRNROSearchKey}*'" + ACTIVEBoolquery;
我想在里面有 CheckBox 过滤器,EnableRowFiltering
以覆盖在加载数据之前检查 CheckBoxes 的情况。所以我可以检查CheckBox,然后EnableRowFiltering
在加载数据后通过调用将数据加载到DataGrid。
MainWindow.xaml:
<!--CHECKBOXES-->
<CheckBox Style="{StaticResource MyCheckBox}" IsChecked="{Binding ACTIVEBool}" x:Name="ActiveCustomer" Content="" HorizontalAlignment="Left" Margin="128,55,0,0" VerticalAlignment="Top"/>
<CheckBox Style="{StaticResource MyCheckBox}" IsChecked="{Binding FIANDSEBool}" x:Name="OnlyFIandSE" Content="" HorizontalAlignment="Left" Margin="24,54,0,0" VerticalAlignment="Top"/>
这是我当前的代码 ViewModel.cs:
// Binding checkbox FIANDSE Bool
private bool _FIANDSEBool;
public bool FIANDSEBool
{
get => this._FIANDSEBool;
set
{
this._FIANDSEBool = true;
OnPropertyChanged();
// Refresh the DataTable filter expression
EnableRowFiltering();
}
}
// Binding checkbox ACTIVE Bool
private bool _ACTIVEBool;
public bool ACTIVEBool
{
get => this._ACTIVEBool;
set
{
this._ACTIVEBool = true;
OnPropertyChanged();
// Refresh the DataTable filter expression
EnableRowFiltering();
}
}
public void EnableRowFiltering()
{
string FIANDSEBoolquery = FIANDSEBool ? "AND KAYTOSSA LIKE '%1%'" : "";
string ACTIVEBoolquery = ACTIVEBool ? "AND YRNRO Like '6%' OR YRNRO Like '7%'" : "";
this.MainDataTable.DefaultView.RowFilter =
$"YRNRO LIKE '{this.YRNROSearchKey}*'" +
$"AND HAKUNIMI LIKE '{this.HAKUNIMISearchKey}*'" +
$"AND KONSERNI LIKE '{this.GROUPSearchKey}*'" +
$"AND LY LIKE '{this.BUSINESSIDSearchKey}*'" +
FIANDSEBoolquery + ACTIVEBoolquery;
}
解决方案
作业
this._FIANDSEBool = true;
和
this._ACTIVEBool = true;
在属性设置器中显然是错误的。
他们应该改用value
关键字:
public bool FIANDSEBool
{
get => _FIANDSEBool;
set
{
_FIANDSEBool = value; // here
OnPropertyChanged();
EnableRowFiltering();
}
}
推荐阅读
- sling - 从 apache sling 启动板 7 到 sling 11
- snowflake-cloud-data-platform - 雪花是否有函数 LISTAGG(column_name [, delimiter] ON OVERFLOW TRUNCATE )?
- c# - 我的 Visual Studio 2019 项目中没有 Default.htm
- php - Laravel Pusher VueJS http://localhost:8000/broadcasting/auth 404(未找到)
- rest - 如何使用 REST API 将文件和附件上传到 sobject 记录?
- jovo-framework - Jovo 部署无法找到 ask-clik
- swift - didRegisterForRemoteNotificationsWithDeviceToken 没有被触发 - 推送通知不起作用
- react-native - Expo共享链接不可点击
- java - 从 Java 8 中的对象列表中获取多个属性列表
- javascript - 程序错误时在外部模块中完成写入流