Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ReactiveUI WPF-获取文本框的最后一个字_C#_Wpf_Reactiveui - Fatal编程技术网

C# ReactiveUI WPF-获取文本框的最后一个字

C# ReactiveUI WPF-获取文本框的最后一个字,c#,wpf,reactiveui,C#,Wpf,Reactiveui,我知道这是一个微不足道的程序,但我正在学习ReactiveUI,而且首先我对整个MVVN都是新手。我试图从文本框中输入的全名中获取名字和姓氏,并将其显示在单独的文本块中 我已经做到了,但我的问题是,有没有一种方法可以只使用LINQ样式的扩展名来实现姓氏,或者我必须使用selectGetLast调用另一个函数,如下所示?而且,如果有一种方法可以使用LINQ样式的扩展来实现,那么这样做更好还是使用selectGetLast更好 如果您有任何其他意见,我们将不胜感激。 提前感谢您提供的任何帮助 Mai

我知道这是一个微不足道的程序,但我正在学习ReactiveUI,而且首先我对整个MVVN都是新手。我试图从文本框中输入的全名中获取名字和姓氏,并将其显示在单独的文本块中

我已经做到了,但我的问题是,有没有一种方法可以只使用LINQ样式的扩展名来实现姓氏,或者我必须使用selectGetLast调用另一个函数,如下所示?而且,如果有一种方法可以使用LINQ样式的扩展来实现,那么这样做更好还是使用selectGetLast更好

如果您有任何其他意见,我们将不胜感激。 提前感谢您提供的任何帮助

MainWindowViewModel.cs

私有字符串\u全名; 公共字符串全名 { get=>\u全名; set=>this.RaiseAndSetIfChangedref\u全名,值; } 私有只读ObservablesPropertyHelper\u firstName; 公共字符串FirstName=>\u FirstName.Value; 私有只读ObservablesPropertyHelper\u lastName; 公共字符串LastName=>\u LastName.Value; 公共主窗口视图模型 { _lastName=this.whenyValuex=>x.FullName .Selectfull=>full?.Trim .DistinctUntil已更改 .Wherefull=>full!=null .选择GetLast//x.LastName,out\u LastName; _firstName=this.whenyValuex=>x.FullName .Selectfull=>full?.Trim .DistinctUntil已更改 .Wherefull=>full!=null .Selectfull=>full.Split''[0] .toproperty此,名称offirstname,out\u firstName; } 私有字符串GetLaststring名称 { string[]splitName=name.Split“”; 如果splitName.Length>2 返回splitName[splitName.Length-1]; 如果splitName.Length==2 返回splitName[1]; 返回字符串。空; } MainWindow.xaml

*更新

怎么样

_lastName = this.WhenAnyValue(x => x.FullName)
.Select(full => full?.Trim())
.DistinctUntilChanged()
.Where(full => !string.IsNullOrWhitespace(full))
.Select(x => x.Split(' ').Last())
.ToProperty(this, x => x.LastName, out _lastName);

至于这是否更好,老实说,这是你的决定。我认为这很简单-只是linq-但可能是你的同事linq说得不好,他们更喜欢一种单独的方法,他们可以进行单元测试并轻松掌握。

如果你想让First for _firstName更简洁,这也应该适用于First for _firstName,顺便说一句,当我添加.Last时,我得到一个警告:Observable.LastIObservable已过时:不再支持阻塞操作。相反,将异步版本与C和Visual Basic async/await结合使用。如果需要阻塞操作,请使用Wait将生成的可观察序列转换为任务对象并阻塞。@Rick Bryant当我使用LastAsync.toProperty时,x=>x.LastName,out\u LastName;我得到一个错误:无法从用法推断方法“OAPHCreationHelperMixin.ToPropertyIobservable、tObj、Expression、Tret、bool、IsScheduler”的类型参数。试着明确地指定类型参数,我会仔细研究一下。谢谢你提供的信息。哦,当然,它试图在可观察的物体上做最后一件事,而不是在阵列上。让我来编辑。
_lastName = this.WhenAnyValue(x => x.FullName)
.Select(full => full?.Trim())
.DistinctUntilChanged()
.Where(full => !string.IsNullOrWhitespace(full))
.Select(x => x.Split(' ').Last())
.ToProperty(this, x => x.LastName, out _lastName);