gpt4 book ai didi

c# - 绑定(bind)文本框 enter press to reactive command

转载 作者:行者123 更新时间:2023-11-30 20:41:56 26 4
gpt4 key购买 nike

我有一个文本框绑定(bind)到具有以下 XAML 的 View 模型:

<TextBox x:Name="usrTxt" Text="{Binding UserID, UpdateSourceTrigger=PropertyChanged}" 
Margin="0,0,0,10" TextWrapping="Wrap" Height="50"
VerticalAlignment="Bottom" ToolTip="User ID" FontSize="29.333"
VerticalContentAlignment="Center" Padding="15,0" TabIndex="0">
<TextBox.InputBindings>
<KeyBinding Key="Return" Command="{Binding EntrCommand}"/>
</TextBox.InputBindings>
</TextBox>

我正在尝试创建一个 ReactiveCommand在我的 View 模型中,只要 KeyBinding 就会触发 View 中的事件被触发。我很确定我的语法有误,但我不确定在查看文档后我需要做什么来修复它。这是我的相关 View 模型代码:

class MainViewModel : ReactiveObject
{
private DbContext dbCtx;

public MainViewModel()
{
dbCtx = new DbContext(Properties.Settings.Default.DbString);

EnterCmd = this.WhenAny(x => x.UserID, x => x.Value)
.Where(x => !String.IsNullOrWhiteSpace(x))
.Do(_ => IsLoading = true);

EnterCmd.Subscribe(x =>
{
Console.WriteLine(x);
IsLoading = false;
});
}

public ReactiveCommand EnterCmd { get; private set; }

...
}

一个明显的问题是WhenAny返回 System.IObservable<string> EnterCmd在哪里期望类型 ReactiveUI.ReactiveCommand .我注意到的另一个问题是我无法声明 EnterCmd使用 getter 和 setter 因为我收到错误 'ReactiveCommand': static types cannot be used as parameters.任何帮助将不胜感激。

最佳答案

RxUI 命令的正确语法:

    public ReactiveCommand<object> EnterCmd { get; private set; }
ObservableAsPropertyHelper<bool> _isLoading;
public bool IsLoading { get { return _isLoading.Value; } }

public MainViewModel()
{
EnterCmd = ReactiveCommand.Create(
this.WhenAny(x => x.UserID, x => x.Value)
.Select(x => !String.IsNullOrWhiteSpace(x)));

EnterCmd.IsExecuting.ToProperty(this, x => x.IsLoading, out _isLoading);

EnterCmd.Subscribe(x =>
{
Console.WriteLine(x);
});

ReactiveCommand 是一个静态辅助类(主要是工厂方法),实际类型是它的泛型版本。

关于c# - 绑定(bind)文本框 enter press to reactive command,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31856796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com