x:Bind TwoWayBinding在Textblock上不起作用



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

问题:即使设置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

但问题是,属性更改事件应该在没有显式编码的情况下工作并自动更新文本块。

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

如果要更新TextBlock的数据绑定Text属性,则应设置其绑定的源属性,即classObjectBalance属性。还要注意,ClassName类应该实现INotifyPropertyChanged接口并引发更改通知。

classObject字段设置为ClassName的新实例不应该更新TextBlock,除非之后调用Bindings.Update()