Je me demandais quel est le meilleur moyen de lier les propriétés de contrôle au CommandParameter dans ReactiveUI? Le BindCommand
ci-dessous ne fournit pas un moyen de transmettre le paramètre. La surcharge prend un property in view model
ou un IObservable<T>
pour les paramètres.Comment lier Combobox à une commande dans ReactiveUI?
Voir
this.WhenActivated(subscription =>
{
subscription(this.BindCommand(
this.ViewModel,
vm => vm.TextCommand,
v => v.ComboBox
));
}
ViewModel
public class MainPageViewModel : ViewModelBase
{
public ReactiveCommand<string, Unit> TextCommand { get; set; }
public MainPageViewModel()
{
TextCommand = ReactiveCommand.CreateFromTask<string>(DoSomething);
}
private Task DoSomething(string selectedText)
{
return Task.Delay(3000);
}
}
La méthode DoSomething est appelée avec selectedText comme null
chaque fois.
J'ai essayé de passer le IObservable
pour ToggleSwitch, mais le comportement n'est pas celui attendu.
Voir
IObservable<bool> toggleOn = this.WhenAnyValue(v => v.Toggle.IsOn);
this.WhenActivated(subscription =>
{
subscription(this.BindCommand(
this.ViewModel,
vm => vm.ToggleCommand,
v => v.Toggle, toggleOn));
}
ViewModel
ToggleCommand = ReactiveCommand.CreateFromTask<bool>(Toggled);
private Task Toggled(bool toggleState)
{
return Task.Delay(3000);
}
Dans le code ci-dessus, je ne réussi à obtenir le toggleState
, mais il est le dernier état non le nouvel état de la ToggleSwitch . En outre, je ne pouvais pas faire ce travail de ComboBox. Je pense qu'il est très courant de passer les paramètres de commande de la vue et il devrait y avoir un moyen plus facile de l'atteindre. Qu'est-ce que je rate? J'utilise l'application UWP.
Merci
Les Combobox n'ont pas de "Command" par nature mais normalement, est-ce que vous essayez de déclencher une commande sur la valeur sélectionnée? –
Vous avez peut-être raison, mais la commande fonctionne comme annoncé. Chaque fois que je change la sélection dans ComboBox ou ToggleSwitch, la commande est exécutée. La question est comment passer un paramètre à cette commande qui est une propriété d'un contrôle, dans le cas de 'ComboBox' il peut être' SelectedItem' ou 'ToggleSwitch'' IsOn'. – resp78
Ne serait pas préférable de faire une liaison à une propriété de votre machine virtuelle à l'élément SelectedItem, alors vous pouvez avoir un WhenAnyValue (x => x ....). InvokeCommand() à la place. Ensuite, vous avez un accès complet à votre propriété. C'est si vous avez besoin de la commande en raison d'une tâche/observable que vous devez attendre. –