2017-09-23 17 views
-1

私はReactiveUIを学びたいので、私はサンプルアプリケーションを作っていますが、InvokeCommandで問題があります。基本的にはSearchPhraseプロパティが変更されるたびに私のShowSearchPhraseCommandが呼び出されます。ここでWPF - ReactiveUI InvokeCommandが機能しない

は私のビューです:

<StackPanel Grid.Column="1" Grid.Row="1" Orientation="Horizontal" 
    VerticalAlignment="Center" > 


    <TextBox Width="100" Height="20" 
    Text="{Binding Path=SearchPhrase, UpdateSourceTrigger=PropertyChanged}" /> 
</StackPanel> 

のViewModel:

public ReactiveCommand ShowSearchPhraseCommand { get; private set; } 

string _searchPhrase; 
public string SearchPhrase 
{ 
    get { return _searchPhrase; } 
    set { this.RaiseAndSetIfChanged(ref _searchPhrase, value); } 
} 

public SecondViewModel(IScreen hostScreen) 
{ 
    HostScreen = hostScreen; 

    // Commands 
    ShowSearchPhraseCommand = ReactiveCommand.Create(() => ShowSearchPhraseCommandHandler(SearchPhrase)); 

    // WhenAny 
    this.WhenAnyValue(x => x.SearchPhrase).Where(x => !string.IsNullOrWhiteSpace(x)).InvokeCommand(ShowSearchPhraseCommand); 
} 

private void ShowSearchPhraseCommandHandler(string searchPhrase) 
{ 
    Debug.WriteLine($"Phrase: {searchPhrase}"); 
} 

そしてここでは私の問題である:

enter image description here

答えて

2

コマンドがUnitを期待:

this.WhenAnyValue(x => x.SearchPhrase) 
    .Where(x => !string.IsNullOrWhiteSpace(x)) 
    .Select(_ => System.Reactive.Unit.Default) //<-- 
    .InvokeCommand(ShowSearchPhraseCommand); 

...あなたがReactiveCommand<string, Unit>として定義しない限り:

public ReactiveCommand<string, System.Reactive.Unit> ShowSearchPhraseCommand { get; private set; } 
... 
ShowSearchPhraseCommand = ReactiveCommand.Create<string>(ShowSearchPhraseCommandHandler); 
関連する問題