更改绑定值后绑定文本块值不会更改

Binding textblock value doesn't change after changing binded value

为什么 TextBlock "T1" 在点击按钮 "B1" 后不显示“101”而仍然显示“100”?

<StackPanel>
    <TextBlock Name="T1" Text="{x:Bind value, Mode=OneWay}"/>
    <Button Name="B1" Content="+1" Click="B1_Click"/>
</StackPanel>

public sealed partial class MainPage : Page
{
    public int value;
    public MainPage()
    {
        InitializeComponent();
        value = 100; // initial value
    }
    private void B1_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
    {
        value = value + 1;
    }
}

您的 value 是一个字段,是的,它适用于 x:Bind。实际上它甚至应该工作 private.

但是为了UI更新value的值,你需要一个 以下三个更改中的 -

  1. 设置好后调用Bindings.Update()
  2. 将其更改为 dependency property
  3. 将其更改为正常 属性,但在您的页面上实施 INotifyPropertyChanged 并在 setter 上引发 属性 更改事件。您可以从 here.
  4. 阅读更多内容

但是该选哪一个呢?这通常是我所做的 -

  1. 如果 属性 很少更改,我使用 Bindings.Update() 并从绑定中删除 Mode=OneWay 以获得最佳性能。
  2. 如果 属性 存在于 UI 元素的代码隐藏中(就像你的情况一样),我会使用依赖项 属性.
  3. 如果 属性 位于 ViewModel 中,我使用 INPC