1

为什么单击按钮“B1”后TextBlock“T1”不显示“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;
    }
}
4

1 回答 1

1

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

但是为了让 UI更新的值value,您需要进行以下三个更改之一 -

  1. 设置好后调用Bindings.Update()
  2. 将其更改为依赖属性
  3. 将其更改为普通属性,但INotifyPropertyChanged在您的页面上实现并在设置器上引发属性更改事件。您可以从这里阅读更多内容。

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

  1. 如果属性很少更改,我使用Bindings.Update()Mode=OneWay从绑定中删除以获得最佳性能。
  2. 如果该属性位于 UI 元素的代码隐藏中(如您的情况),我将使用依赖属性。
  3. 如果属性位于 ViewModel 中,我使用INPC.
于 2017-07-05T10:42:25.920 回答