x:绑定TwoWayBinding在Textblock上不起作用

时间:2018-07-18 13:55:16

标签: c# xaml uwp two-way-binding xbind

我正在尝试使用编译绑定Textblockx:Bind上进行双向绑定

问题: 即使设置TwoWay绑定模式和PropertyChanged源触发器。无法使其正常工作。当对象属性的余额在后面的代码中更改时,不会在UI中更新。

下面是代码。

XAML

<TextBlock  x:Name="Balance"
            Text="{x:Bind classObject.Balance,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

隐藏代码

private ClassName classObject = new ClassName() { Name = "Foo",Balance = 100 };
public Observable ViewModel { get; } = new Observable();
private void NavLinksList_ItemClick(object sender,ItemClickEventArgs e)
{
    classObject = new ClassName() { Name = "Blah",Balance = 10 * new Random().NextDouble() * (50 - 1) + 1 };
}

可观察

public class Observable : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void Set<T>(ref T storage, T value, [CallerMemberName]string propertyName = null)
    {
        if (Equals(storage, value))
        {
            return;
        }

        storage = value;
        OnPropertyChanged(propertyName);
    }

    protected void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

替代解决方案

手动在代码后面设置Textblock.Text

但是问题是属性更改事件应该可以正常工作,并且无需显式编码即可自动更新文本块。

我搜索了其他问题,但找不到相似的问题。

1 个答案:

答案 0 :(得分:1)

如果要更新Text的数据绑定的TextBlock属性,则应设置其绑定到的source属性,即Balance的{​​{1}}属性。另请注意,classObject类应实现ClassName接口并引发更改通知。

INotifyPropertyChanged字段设置为classObject的新实例不应该更新ClassName,除非您随后调用TextBlock