Xaml 从代码隐藏更改单向绑定的TextBlock值。

Xaml 从代码隐藏更改单向绑定的TextBlock值。,xaml,winrt-xaml,Xaml,Winrt Xaml,我有一个TextBlock,它的Text属性绑定到ViewModel属性。绑定是单向的。 当我从xaml.cs更改控件的Text属性时,绑定会被破坏。如果绑定是双向的,我没有这个问题,但是源属性也会更新。是否可以进行单向绑定并在不停止绑定的情况下更改目标属性值 我建议一种解决方法,比如将绑定设置为双向,忽略属性中的更新。大概是这样的: private string textValue; public string TextValue { get { return textValue;

我有一个TextBlock,它的Text属性绑定到ViewModel属性。绑定是单向的。
当我从xaml.cs更改控件的Text属性时,绑定会被破坏。如果绑定是双向的,我没有这个问题,但是源属性也会更新。是否可以进行单向绑定并在不停止绑定的情况下更改目标属性值

我建议一种解决方法,比如将绑定设置为双向,忽略属性中的更新。大概是这样的:

private string textValue;

public string TextValue
{
    get { return textValue; }
    set
    {
        :
    }
}

现在,视图无法再设置属性。

虽然没有提供代码,但当您将控件绑定到视图模型,并且在稍后阶段逻辑尝试以编程方式更新控件中的值时,通常会出现这种情况

您不应该尝试这样做,即为一个控件定义多个值源。如果将控件绑定到视图模型上的属性,则要更新控件中的值,应更新视图模型中的字段

如果要在运行时以编程方式设置绑定控件的值,使其不再与绑定对象值匹配,则当其他事件导致重新计算控件绑定时,将再次覆盖以编程方式提供的值,您可以很容易地得到这样一个场景,即您以编程方式提供的值对用户永远都不可见

在这种情况下,您应该:

  • 向视图模型添加一个新属性,将该值绑定到控件,然后程序逻辑可以在加载数据时将该值设置为与原始属性相同的值,并在需要时进行更新

  • 根本不使用绑定,始终以编程方式写入控件,以便在值更新时严格控制


  • 如果你一定要有一个解决办法的话,这是有办法的。如果您使用的是已编译的绑定(
    x:Bind
    ),则由于绑定是已编译的,因此可以在运行时调用绑定依赖项属性上的
    SetValue
    ,并且仍将评估以前编译的绑定。但是,我建议不要利用这一点,因为这会使您的代码更难理解和调试。当使用绑定时,我们倾向于不寻找直接寻址和设置控制值的代码。

    谢谢您的回答。很遗憾,我无法更改setter。在[uwp]中,您可以使用依赖项对象上的
    SetValue
    方法设置依赖项属性值,而不影响绑定。