【问题标题】:Binding textblock value doesn't change after changing binded value更改绑定值后绑定文本块值不会更改
【发布时间】:2017-12-08 23:17:54
【问题描述】:

为什么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;
    }
}

【问题讨论】:

    标签: c# xaml binding uwp xbind


    【解决方案1】:

    您的value 是一个字段,是的,它适用于x:Bind。实际上,它甚至应该可以成为private。

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

    1. 设置好后拨打Bindings.Update()。
    2. 将其更改为dependency property。
    3. 将其更改为普通属性,但在您的页面上实现INotifyPropertyChanged 并在设置器上引发属性更改事件。您可以从here 了解更多信息。

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

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

    【讨论】:

    • 值得注意的是 Bindings.Update() 将更新页面上的所有 x:Bind 绑定,因此如果您的布局开始变得更加复杂,这可能不是正确的路径。
    • 太棒了,谢谢。
    猜你喜欢
    • 2011-02-24
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多