Привязка AutoSuggestBox (UWP) через код позади при использовании Reactive UI - PullRequest
0 голосов
/ 15 февраля 2019

В документе Reactive 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 голосов
/ 19 февраля 2019

Чтобы получить доступ к событию QuerySubmitted, вам нужно выполнить SearchBox.Events (). QuerySubmitted.А что касается BindCommand, вам, вероятно, придется явно указать, к какому событию вы хотите привязать вашу команду.Это можно сделать с помощью необязательного строкового параметра toEvent: nameof (SearchBox.QuerySubmitted)

0 голосов
/ 15 февраля 2019

Я не пробовал связывать команду напрямую, но обычно я связываюсь со свойством и затем прослушиваю изменения.

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

это не проверено, может быть, даже не самый лучший способ сделать это, но это то, как я это делал

...