我有一个TextBlock,它的Text属性绑定到ViewModel属性。绑定是单向的。 当我从xaml.cs更改Control的Text属性时,绑定会被破坏。如果绑定是TwoWay我没有这个问题,但源属性也更新。是否可以使用OneWay绑定并更改目标属性值而不制动绑定?
答案 0 :(得分:1)
我建议一种解决方法,例如将绑定设置为 TwoWay 并忽略属性中的更新。像这样:
private string textValue;
public string TextValue
{
get { return textValue; }
set
{
:
}
}
现在视图无法再设置该属性。
答案 1 :(得分:0)
尽管没有提供任何代码,但是当您将控件绑定到视图模型并且在稍后的阶段中,逻辑试图以编程方式更新控件中的值时,通常会发生这种情况。
您不应尝试执行此操作,即为控件定义值的多个来源。如果将控件绑定到视图模型上的属性,则要更新控件中的值,应更新视图模型中的字段。
如果要在运行时以编程方式设置绑定控件的值,以使其不再与绑定对象的值匹配,那么当某些其他事件导致控件绑定被重新求值时,以编程方式提供的值将再次被覆盖,您很容易遇到这样的情况:您以编程方式提供的值永远对用户不可见。
在这种情况下,您应该:
向视图模型添加 new 属性,将该值绑定到控件,然后在加载和更新数据时,程序逻辑可以将此值设置为等于原始属性何时需要
根本不使用绑定,请始终以编程方式写入控件,以便您紧密控制值的更新时间。
如果您绝对必须有一个解决方法,则可以使用此方法。如果您使用的是已编译的绑定(x:Bind
),则由于绑定是已编译的,因此可以在运行时在绑定依赖项属性上调用SetValue
,并且先前已编译的绑定将仍在评估中。但是,我建议您不要利用此漏洞,因为它会使您的代码更难以遵循和调试,使用绑定时,我们倾向于不寻找直接寻址并设置控制值的代码。