在我的最新项目中,我决定测试响应式编程世界提供的一些功能。由于它是一个 C# 项目,我已经开始使用 System.Reactive 和 ReactiveProperty nuget 包。在我的项目中,我尝试通过以下代码组合绑定到 WPF 文本框控件的 2 个属性:
public ReactiveProperty<string> InputFieldFirst { get; set; }
public ReactiveProperty<string> InputFieldSecond { get; set; }
public ReactiveProperty<string> RxTest { get; set; }
public MainViewModel()
{
InputFieldFirst = new ReactiveProperty<string>("Demo");
InputFieldSecond = new ReactiveProperty<string>("Test");
RxTest = InputFieldFirst.Zip(InputFieldSecond, CombineStrings).Delay(TimeSpan.FromMilliseconds(500)).ToReactiveProperty();
}
private string CombineStrings(string a, string b)
{
return $"{a} {b}";
}
绑定到 RxTest 的文本框获取“演示测试”的初始值 - 但是当我编辑绑定到 InputFieldFirst 或 InputFieldSecond 的文本框的内容时,不会触发更新。
当我按如下更改代码时,对 InputFieldFirst 的所有更新都是可见的,并在 RxTest 中按预期延迟。
public MainViewModel(IReactiveRepository<DemoContent> repo)
{
InputFieldFirst = new ReactiveProperty<string>("Demo");
InputFieldSecond = new ReactiveProperty<string>("Test");
RxTest = InputFieldFirst.Delay(TimeSpan.FromMilliseconds(500)).ToReactiveProperty();
}
任何提示如何设置 .Zip() 都会非常好。
更新完成
文本框的 XAML 代码
<Grid>
<StackPanel>
<TextBox Text="{Binding InputFieldFirst.Value, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<TextBox Text="{Binding InputFieldSecond.Value, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<TextBox Text="{Binding RxTest.Value}"></TextBox>
</StackPanel>
</Grid>