代码之家  ›  专栏  ›  技术社区  ›  Morse unmounted

x:bind twowaybinding不在文本块上工作

  •  -1
  • Morse unmounted  · 技术社区  · 6 年前

    我正在努力使双向装订工作 Textblock 具有编译绑定 x: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 回复  |  直到 6 年前
        1
  •  1
  •   mm8    6 年前

    如果要更新数据绑定 Text 的属性 TextBlock 您应该设置它绑定到的源属性,即 Balance 的属性 classObject . 还要注意, ClassName 类应实现 INotifyPropertyChanged 接口并发出更改通知。

    设置 类对象 字段到的新实例 类名 不应该更新 控件 ,除非你打电话 Bindings.Update() 之后。