- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 .NET 4.5 中使用 RXUI 6 和 WPF。
当它绑定(bind)到的 ViewModel 属性由 ObservableAsPropertyHelper
支持时,我一直无法获得提供给我的 View 的初始值。 .
根据documentation :
ToProperty / OAPH changes
ObservableAsPropertyHelper no longer is itself an IObservable, use WhenAny to observe it.
ObservableAsPropertyHelper now lazily Subscribes to the source only when the Value is read for the first time. This significantly
improves performance and memory usage, but at the cost of some "Why
doesn't my test work??" confusion. If you find that your ToProperty
"isn't working", this may be why.
我看了this question这似乎解决了我同样的问题,但提供的答案适用于测试和 ReactiveCommand
.我想不出最干净的方法来使它在我的情况下与任何 IObservable<>
一起工作不一定是 ReactiveCommand
(下面过于简单化)。
示例 View 模型:
public class ViewModel : ReactiveObject
{
private readonly ObservableAsPropertyHelper<string> _message;
public ViewModel()
{
var someObservable = Observable.Return("Hello");
_message = someObservable
.ToProperty(this, t => t.Message);
}
public string Message
{
get
{
return _message.Value;
}
}
}
示例 View 代码隐藏:
public partial class View : UserControl, IViewFor<ViewModel>
{
public View()
{
InitializeComponent();
this.WhenAnyValue(t => t.ViewModel.Message)
.BindTo(this, t => t.MessageTextBlock.Text);
}
// ... IViewFor Stuff....
}
所以现在,消息文本框将不包含初始值。但是,如果在我的 ViewModel 中,我要将行添加到构造函数中:
this.WhenAnyValue(t => t.Message).Subscribe(s => {});
它现在将触发 TextBlock,因为现在有一个订阅。所以我猜 .BindTo()
方法实际上从来没有算作订阅?还是懒惰之上的懒惰?这个空订阅是否抵消了它懒惰带来的性能优势?或者我不应该使用 .BindTo()
只需使用 .Subscribe()
分配 TextBlock?
**** 编辑 ****好的,我的代码中可能发生了其他事情,因为我无法始终如一地重现此行为。如果找到根本原因,我会报告。
* 编辑 2 *我已经确认我有另一个问题导致了失火,而不是 OAPH。 .ToProperty 和 .BindTo 现在似乎一直在按预期工作。谢谢。
最佳答案
It will now fire off to the TextBlock because now there is a subscription. So I'm guessing that the .BindTo() method never actually counts as a subscription?
BindTo 立即订阅源并且应该启动 OAPH。但是,在 View 获得 ViewModel 之前,此订阅实际上发生:
// Can't subscribe to (null).Message!
this.WhenAnyValue(t => t.ViewModel.Message)
关于c# - ToProperty 和 BindTo - 无需订阅即可获取初始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25252210/
我有一个 MvvmCross MvxSpinner在 Android 中绑定(bind)。用户选择一个值并反射(reflect)在我的属性 MealTypeSelected . 微调器允许用户选择膳
我有一个带有某种类型函数指针的公共(public)变量的表单,如下所示: {...} interface type TExternalFunction = function(var x : TAn
this question中的答案对我理解如何在 IBAction 方法中检索步进器值很有帮助(我投了赞成票),但我仍然不理解在我第一次加载 View 时如何获取步进器的初始值。 我想将初始值设置为
Apple 文档指出: The willSet and didSet observers of superclass properties are called when a property is
我正在将 ColdFusion 应用程序转换为 C#(我是 CF n00b)。 我有一个脚本执行 cfquery,然后执行 cfloop 的结果,它似乎试图将当前行与其下一行进行比较。它似乎试图确保它
我在为 antd 动态表单设置初始值时遇到问题。有什么方法可以在动态中初始化值吗?它需要使用 getFieldDecorator 注册字段。但对于动态字段,该字段之前没有注册。 我收到这个错误:不能在
是否可以动态地为 forms.FileField() 赋予初始值? 最佳答案 我不确定,如果这就是你想要的,但是…… 显然,您不能为文件输入设置初始数据(这意味着您将文件发送给用户)。 Django
我对 Django 表单中 DateTimeField 的初始值没有什么问题。 我在 forms.py 中有声明 class FaultForm(forms.ModelForm): ...
如何使用代码设置 slider 初始值?我知道如何在属性检查器中执行此操作。我想在我的应用程序启动时使用“UserDefault”作为初始值,当我的应用程序第一次启动时,我想将初始值设置为“1.0”
我有一个 RadioButton其 IsChecked 的元素属性绑定(bind)到 MyProperty在 ViewModel . Binding有模式OneWayToSource由于某些原因,它会
我有一个ViewModel类,看起来像这样: class EditUserViewModel( private val initUser: User, ) : ViewModel() {
有人可以帮我解决我的问题吗,问题是我希望我输入到文本字段的第一个初始值只是从 1 到 9 的数字,我正在使用小数垫,所以我也不希望我的初始值是小数点,但在第一个值(仅从 1 t0 9 开始的数字)之后
我正在使用 NSFetchedResultsController 从 CoreData 获取数据并加载包含四个部分的 TableView 。当应用程序第一次运行时,它可以完美地工作,将 plist 加
使用 primeNg 下拉组件,我试图用初始值初始化下拉列表,但没有成功,我使用的是响应式(Reactive)方法。 我检查了 primeNg 文档和演示 - 几乎所有示例都使用模板驱动,我希望模型驱
如何在 ASP.NET 中设置数据绑定(bind)下拉列表的初始值? 例如,我想要这些值,但要显示的第一个值应该是 -- Select One ---,且值为空。 最佳答案 我想你想做的是这样的:
我知道我不能给 BehaviorSubject一个 Observable 值,但我需要一种方法来解决这个问题。在应用程序初始化时,我正在获取当前用户(如果存在),我需要提供 BehaviorSubje
这是我在这里的第一篇文章,所以我希望它是全面的。 我正在使用 AngularJs,并且我使用 Angular 指令添加了一个 JqueryUI slider 。我找到了很多关于如何做到这一点的例子,但
如何有效地为大型数组分配一个公共(public)初始值?例如,如果我有一个 100 x 100 x 100 的整数数组,其中所有初始值都应为零。 在 matlab 中我会简单地写: array = z
我正在为 iOS 应用程序创建一个 Pebble 配套应用程序。我已经使用一些初始值设置了我的 AppSync: Tuplet initial_values[] = { TupletC
有件事我迟到了: const [object, setObject] = useState(new SomeObject()); 在这里,我们在每次重新渲染上构造一个SomeObject实例。然后,如
我是一名优秀的程序员,十分优秀!