Lyandor Ответов: 0

Обновление магазина TextBlock и текстовое поле с привязкой к данным через строку


Всем привет, я пытаюсь привязать строку к textblock и textbox в UWP. То, чего я пытаюсь достичь, - это просто обновить текстовый блок и текстовое поле при нажатии кнопки. Пока что начальная привязка работает отлично, выполнение ICommand также в порядке, строка изменилась при нажатии кнопки. Однако обновленная строка не обновляется в текстовом блоке и текстовом поле. код выглядит следующим образом:

Файл MainPage.язык XAML
<StackPanel>
   <TextBlock text="{x:bind vm.TestString, Mode=OneWay}"/>
   <TextBox text="{Binding TestString, Mode=TwoWay, UpdateSourceTrigger=OnPropertyChanged}" />
   <Button Content="Press Me" ICommand="{Binding Cmd}"/>
</StackPanel>


Файл MainPage.язык XAML.в CS
ViewModel vm = new ViewModel();

public MainPage()
{
   this.DataContext = vm;
   this.InitializeComponent();
}


RelayCommand. cs
public event EventHandler CanExecuteChanged;

private readonly Action execute;
private readonly Predicate<object> canExecute;

public bool CanExecute(object parameter)
{
  return canExecute == null ? true : canExecute(parameter);
}

public void Execute(object parameter)
{
  this.execute();
}

public RelayCommand(Action exec, Predicate<object> canExec)
{
  execute = exec;
  canExecute = canExec;
}


Viewmodel. cs наследуется от INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;

protected void OnPropertyChanged(string PropertyName)
{
   PropetyChangedEventHandler hndl = this.PropertyChanged;

   if (hndl == null)
   {
      var e = new PropertyChangedEventArgs(PropertyName);
      hndl(this,e);
   }
}

private string testString;

public string TestString
{
   get {return testString;}
   set 
   {
      testString= value;
      OnPropertyChanged("TestString");
   }
}

public ViewModel()
{
   testString = "This is the original text";
}

public ICommand Cmd
{
   get { return new RelayCommand(() => this.ChangeString(), param => true);} 
}

private void ChangeString()
{
   testString = "String is Changed";
}


Что я уже пробовал:

Я читал, что в отличие от WPF, textblock в UWP по умолчанию привязан к одному времени. Я попытался изменить его на односторонний, а также двусторонний, но текстовый блок и текстовое поле по-прежнему не обновлялись. Я также попытался установить триггер источника обновления в положение on property changed, но все равно не пошел

0 Ответов