2014-09-23 2 views
2

Есть ли способ изменить текст в ячейке редактора после события?Xamarin.Forms refresh TextProperty of Editor

У меня есть ячейка редактора, которая показывает адрес из базы данных SQLite. У меня также есть кнопка, которая получает текущий адрес и показывает это в предупреждении, которое спрашивает, хотят ли они обновить адрес до этого. Если «Да», то я хотел бы показать новый адрес в ячейке «Редактор».

public class UserInfo : INotifyPropertyChanged 
{ 
    public string address; 
    public string Address 
    { 
     get { return address; } 
     set 
     { 
      if (value.Equals(address, StringComparison.Ordinal)) 
      { 
       return; 
      } 
      address = value; 
      OnPropertyChanged(); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

Мой код для редактирования ячейки

Editor userAddress = new Editor 
{ 
    BindingContext = uInfo, // have also tried uInfo.Address here 
    Text = uInfo.Address, 
    Keyboard = Keyboard.Text, 

};

, а затем это после того, как он получил текущий адрес у меня есть этот

bool response = await DisplayAlert("Current Address", "Would you like to use this as your address?\n" + currAddress, "No", "Yes"); 
    if (response) 
    { 
     //we will update the editor to show the current address 
     uInfo.Address = currAddress; 
    } 

Как заставить его обновить ячейку редактора, чтобы показать новый адрес?

ответ

2

Вы устанавливаете BindingContext элемента управления, но не указываете привязку, чтобы идти с ним. Вы хотите привязать TextProperty Editor к свойству Address вашего контекста.

Editor userAddress = new Editor 
{ 
    BindingContext = uinfo, 
    Keyboard = Keyboard.Text 
}; 

// bind the TextProperty of the Editor to the Address property of your context 
userAddress.SetBinding (Editor.TextProperty, "Address"); 

Это также может работать, но я не уверен синтаксис является правильным:

Editor userAddress = new Editor 
{ 
    BindingContext = uinfo, 
    Text = new Binding("Address"), 
    Keyboard = Keyboard.Text 
}; 
+0

Спасибо за быстрый ответ. Когда я использую userAddress.SetBinding (Editor.TextProperty, «Адрес»); Я получаю System.InvalidCastException: не может отличить от типа источника до типа назначения – user1667474

+0

Я уверен, что синтаксис верен. Если вы посмотрите на образец Xamarin ToDo, должен быть элемент управления редактором, используя тот же подход привязки. – Jason

+0

Да, это то же самое, что и ToDo, но оно вызывает исключение при загрузке страницы. Я только что попробовал это - userAddress.SetBinding (Editor.TextProperty, новое связывание («Адрес», BindingMode.TwoWay); это все еще не обновляет редактор, но он не генерирует исключение либо s- я предполагаю, что Я становлюсь ближе – user1667474

Смежные вопросы