c# - 如何使用buttonclick从文本框中删除过滤器文本
问题描述
我正在尝试从文本框中删除过滤器文本,但到目前为止我一直无法做到这一点。我有一个工作正常的collectionview 过滤器。当我添加一个按钮来清除过滤器和过滤器文本框中的文本时,集合过滤器被清除并显示完整的集合,但旧过滤器的文本仍然显示。我在这个项目中使用棱镜。
这是过滤器和清除过滤器的代码部分。
class ScripterViewModel : BindableBase
{
public ScripterViewModel()
{
ScripterModel scripterModel = new ScripterModel();
KeysToChoose = new ObservableCollection<Keys>();
this.AddItemBtn = new DelegateCommand<Keys>(addItem);
this.AddTextBtn = new DelegateCommand(addText);
this.ClearSearchBtn = new DelegateCommand(ClearSearch);
SelectedOption = "Lathe Keys";
ItemsView.Filter = new Predicate<object>(o => Filter(o as Keys));
}
private bool Filter(Keys keys)
{
return Search == null
|| keys.Description.IndexOf(Search, StringComparison.OrdinalIgnoreCase) != -1;
}
public ICollectionView ItemsView
{
get
{
return CollectionViewSource.GetDefaultView(KeysToChoose);
}
}
private string _search;
public string Search
{
get
{
return _search;
}
set
{
_search = value;
SetProperty(ref _search, value);
ItemsView.Refresh();
}
}
public event EventHandler CanExecuteChanged
{
add
{
CommandManager.RequerySuggested += value;
}
remove
{
CommandManager.RequerySuggested -= value;
}
}
public bool CanClearSearch()
{
return true;
}
public ICommand ClearSearchBtn
{
get;
set;
}
public void ClearSearch()
{
if (Search != null)
{
try
{
Search = "";
}
catch (Exception e)
{
Console.WriteLine("error: '{0}'", e);
}
}
}
添加一些 xaml 代码 文本框名称 SearchText 是我想通过单击按钮来清除的内容。
</TabControl>
<TextBox BorderBrush="Black" HorizontalAlignment="Left" Margin="48,19,0,0" TextWrapping="Wrap" Text="{Binding Path=ClipBoardText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="502" Height="25" IsEnabled="False" />
<TextBox x:Name="SearchText" HorizontalAlignment="Left" Height="23" Margin="48,75,0,0" TextWrapping="Wrap" Text="{Binding Path=Search, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="502" RenderTransformOrigin="0.496,1.085"/>
<Button x:Name="ClearSearchBtn" Content="Clear Search" Command="{Binding Path=ClearSearchBtn}" HorizontalAlignment="Left" Margin="48,49,0,0" VerticalAlignment="Top" Width="75" RenderTransformOrigin="-0.371,-0.704" Visibility="Visible"/>
</Grid>
解决方案
- ClearSearchBtn 不起作用,因为您的搜索不会触发 PropertyChanged。
- SetProperty(ref _search, value) :内部工作逻辑是PropertyChanged只有在值发生变化时才会触发。
搜索重复设定值
private string _search;
public string Search
{
get
{
return _search;
}
set
{
_search = value;// remove this
SetProperty(ref _search, value);
ItemsView.Refresh();
}
}
推荐阅读
- statistics - 空值的马氏距离
- python - 将 python 数据框导出到谷歌表格中的树结构中
- elixir - 具有持久状态的正确 GenServer 实现
- wpf - 如何根据 TemplatedParent 的 ItemSource 属性设置 ComboBox ControlTemplate 的属性?
- flutter - 如何设置包装 ListView.Builder 的容器的特定高度
- python - 为什么我在编写 python 闭包时遇到 UnboundLocalError,但在另一个类似的代码片段中却没有?
- wso2 - WS02 apim.gateway.environment
- jquery - 如何禁用ie11浏览器的超链接
- c++ - 如何使用引号将参数传递给系统函数?
- angular - 如何在角度 10 中动态添加和删除高图?