Xaml 从代码隐藏更改单向绑定的TextBlock值。
我有一个TextBlock,它的Text属性绑定到ViewModel属性。绑定是单向的。Xaml 从代码隐藏更改单向绑定的TextBlock值。,xaml,winrt-xaml,Xaml,Winrt Xaml,我有一个TextBlock,它的Text属性绑定到ViewModel属性。绑定是单向的。 当我从xaml.cs更改控件的Text属性时,绑定会被破坏。如果绑定是双向的,我没有这个问题,但是源属性也会更新。是否可以进行单向绑定并在不停止绑定的情况下更改目标属性值 我建议一种解决方法,比如将绑定设置为双向,忽略属性中的更新。大概是这样的: private string textValue; public string TextValue { get { return textValue;
当我从xaml.cs更改控件的Text属性时,绑定会被破坏。如果绑定是双向的,我没有这个问题,但是源属性也会更新。是否可以进行单向绑定并在不停止绑定的情况下更改目标属性值 我建议一种解决方法,比如将绑定设置为双向,忽略属性中的更新。大概是这样的:
private string textValue;
public string TextValue
{
get { return textValue; }
set
{
:
}
}
现在,视图无法再设置属性。虽然没有提供代码,但当您将控件绑定到视图模型,并且在稍后阶段逻辑尝试以编程方式更新控件中的值时,通常会出现这种情况 您不应该尝试这样做,即为一个控件定义多个值源。如果将控件绑定到视图模型上的属性,则要更新控件中的值,应更新视图模型中的字段 如果要在运行时以编程方式设置绑定控件的值,使其不再与绑定对象值匹配,则当其他事件导致重新计算控件绑定时,将再次覆盖以编程方式提供的值,您可以很容易地得到这样一个场景,即您以编程方式提供的值对用户永远都不可见 在这种情况下,您应该:
如果你一定要有一个解决办法的话,这是有办法的。如果您使用的是已编译的绑定(
x:Bind
),则由于绑定是已编译的,因此可以在运行时调用绑定依赖项属性上的SetValue
,并且仍将评估以前编译的绑定。但是,我建议不要利用这一点,因为这会使您的代码更难理解和调试。当使用绑定时,我们倾向于不寻找直接寻址和设置控制值的代码。谢谢您的回答。很遗憾,我无法更改setter。在[uwp]中,您可以使用依赖项对象上的SetValue
方法设置依赖项属性值,而不影响绑定。