Значение текстового блока привязки не изменяется после изменения привязанного значения

Почему TextBlock «T1» не показывает «101» после нажатия кнопки «B1» и по-прежнему показывает «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;
    }
}

person Amir Hussein Nargesian    schedule 05.07.2017    source источник


Ответы (1)


Ваше value — это поле, да, оно работает с x:Bind. На самом деле это должно работать даже будучи private.

Но для того, чтобы пользовательский интерфейс обновил значение value, вам нужно внести одно изменение ниже:

  1. Вызовите Bindings.Update() после установки.
  2. измените его на свойство зависимости .
  3. Измените его на обычное свойство, но реализуйте INotifyPropertyChanged на своей странице и вызовите событие изменения свойства в установщике. Вы можете прочитать больше на здесь .

Но какой выбрать? Обычно я так делаю -

  1. Если свойство меняется редко, я использую Bindings.Update() и удаляю Mode=OneWay из привязки, чтобы обеспечить наилучшую производительность.
  2. Если свойство находится в коде элемента пользовательского интерфейса (как в вашем случае), я использую свойство зависимости.
  3. Если свойство находится внутри ViewModel, я использую INPC.
person Justin XL    schedule 05.07.2017
comment
Стоит отметить, что Bindings.Update() обновит все привязки x:Bind на странице, поэтому может оказаться неправильным путем, если ваш макет начнет усложняться. - person Johnny Westlake; 05.07.2017
comment
Великолепно, спасибо. - person Amir Hussein Nargesian; 06.07.2017