反应性UI文档建议在绑定后使用代码而不是XAML绑定,以避免内存泄漏。我试图将视图模型中存在的SearchCommand
绑定到AutoSuggestBox
。
SearchView.xaml
<AutoSuggestBox x:Name="SearchBox" QueryIcon="Find"/>
SearchView.xaml.cs
this.BindCommand(ViewModel,
viewModel => viewModel.SearchCommand,
view => view.SearchBox);
但是,这不起作用,不会调用该命令。我也尝试绑定QuerySubmitted
事件,但在下面的Events()
中找不到它。我使用了ReactiveUI.Events
包裹
SearchView.xaml.cs
this.Events().QuerySubmitted
.InvokeCommand(this, x => x.ViewModel.SearchCommand)
答案 0 :(得分:1)
要访问QuerySubmitted事件,您需要执行SearchBox.Events()。QuerySubmitted。对于BindCommand,您可能必须明确指定要将命令绑定到哪个事件。您可以使用名为toEvent的可选字符串参数来做到这一点:nameof(SearchBox.QuerySubmitted)
答案 1 :(得分:0)
我还没有尝试直接绑定命令,但是通常我绑定到属性然后监听更改。
this.Bind(ViewModel,
viewModel => viewModel.SearchTerm,
view => view.SearchBox);
然后在您的视图模型中
private string _searchTerm;
public string SearchTerm
{
get => _searchTerm;
set => this.RaiseAndSetIfChanged(ref _searchTerm, value);
}
然后在构造函数内部
this.WhenAnyValue(x => x.SearchTerm).Subscribe(_ => SearchCommand());
这没有经过测试,甚至可能不是最好的方式,但这就是我一直在做的方式