使用Reactive UI时,AutoSuggestBox(UWP)通过背后的代码绑定

时间:2019-02-15 13:48:04

标签: uwp reactiveui

反应性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)

2 个答案:

答案 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());

这没有经过测试,甚至可能不是最好的方式,但这就是我一直在做的方式

相关问题