更改绑定值后绑定文本块值不会更改
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
的值,你需要一个 以下三个更改中的 -
- 设置好后调用
Bindings.Update()
- 将其更改为 dependency property。
- 将其更改为正常 属性,但在您的页面上实施
INotifyPropertyChanged
并在 setter 上引发 属性 更改事件。您可以从 here. 阅读更多内容
但是该选哪一个呢?这通常是我所做的 -
- 如果 属性 很少更改,我使用
Bindings.Update()
并从绑定中删除 Mode=OneWay
以获得最佳性能。
- 如果 属性 存在于 UI 元素的代码隐藏中(就像你的情况一样),我会使用依赖项 属性.
- 如果 属性 位于 ViewModel 中,我使用
INPC
。
为什么 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
的值,你需要一个 以下三个更改中的 -
- 设置好后调用
Bindings.Update()
- 将其更改为 dependency property。
- 将其更改为正常 属性,但在您的页面上实施
INotifyPropertyChanged
并在 setter 上引发 属性 更改事件。您可以从 here. 阅读更多内容
但是该选哪一个呢?这通常是我所做的 -
- 如果 属性 很少更改,我使用
Bindings.Update()
并从绑定中删除Mode=OneWay
以获得最佳性能。 - 如果 属性 存在于 UI 元素的代码隐藏中(就像你的情况一样),我会使用依赖项 属性.
- 如果 属性 位于 ViewModel 中,我使用
INPC
。