C# 绑定文本块值不为';在更改绑定值后不进行更改

C# 绑定文本块值不为';在更改绑定值后不进行更改,c#,xaml,binding,uwp,xbind,C#,Xaml,Binding,Uwp,Xbind,为什么文本块“T1”在点击按钮“B1”后不显示“101”而仍然显示“100” 您的值是一个字段,是的,它与x:Bind一起工作。实际上,它甚至应该是私有的 但是为了让UI更新value的值,您需要进行以下三项更改之一- 设置后调用Bindings.Update() 把它换成一个 将其更改为普通属性,但在页面上实现INotifyPropertyChanged,并在setter上引发属性更改事件。你可以从中读到更多 但是选择哪一个呢?我通常就是这么做的- 如果属性很少更改,我将使用Bindings

为什么文本块“T1”在点击按钮“B1”后不显示“101”而仍然显示“100”


您的
是一个字段,是的,它与
x:Bind
一起工作。实际上,它甚至应该是私有的

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

  • 设置后调用
    Bindings.Update()
  • 把它换成一个
  • 将其更改为普通属性,但在页面上实现
    INotifyPropertyChanged
    ,并在setter上引发属性更改事件。你可以从中读到更多

  • 但是选择哪一个呢?我通常就是这么做的-

  • 如果属性很少更改,我将使用
    Bindings.Update()
    并从绑定中删除
    Mode=OneWay
    ,以获得最佳性能
  • 如果该属性存在于UI元素的代码隐藏中(如您的情况),我将使用dependency属性
  • 如果该属性位于ViewModel中,我将使用
    INPC

  • 值得注意的是,Bindings.Update()将更新页面上的所有x:Bind绑定,因此如果布局开始变得更复杂,可能不是正确的路径。非常好,谢谢。
    <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;
        }
    }