2015-04-28 5 views
0

Я новичок в привязке данных. Мне удалось сделать одностороннюю привязку данных, но у меня есть проблемы с двумя способами.Двустороннее связывание данных с объектом usercontrol

Я сделал 1) UserControl с некоторыми текстовыми блоками в нем, 2) класса с некоторыми строковыми свойствами, 3) ObservableCollection, который использует этот класс для создания объектов с теми свойствами, 4) ListView, который генерируется ObservableCollection и имеет usercontrol как datatemplate для элементов.

связать свойство класса с TextBlock UserControl, я написал следующий код XAML:

<TextBlock x:Name="MyTextBlock" Text="{Binding TextBlock_Property}" /> 

Где MyTextBlock является TextBlock внутри UserControl и TextBlock_Property является одним из свойств из класса я создал , Я также пробовал Text="{Binding TextBlock_Property, Mode=TwoWay}", но я не видел никакой разницы.

Примечание: Когда я изменяю свойство созданного объекта, также изменяется текстовый блок, но при изменении содержимого Textblock свойство не обновляется.

Update: Класс Я сделал это

class MyClass 
{ 
    public string Title { get; set; } 
    public string TextBlock_Property { get; set; } 

    public MyClass(string title, string textBlock_Property) 
    { 
     Title = title; 
     TextBlock_Property = textBlock_Property; 
    } 
} 
+0

Возможный дубликат [My Dependency Property только один способ связывания] (http://stackoverflow.com/questions/24027319/my-dependency-property-is-only-binding-one-way? Rq = 1) –

+0

W8 Я собираюсь найти это свойство Dependency, потому что не уверен, что это такое, не использовал ничего подобного. – user2975038

+0

Я не думаю, что это проблема свойства зависимостей. Похоже, он просто привязывается к собственности. Можем ли мы увидеть VM или код, который имеет ваши свойства? И где вы устанавливаете свой datacontext, если хотите? –

ответ

1

Класс MyClass должен реализовать INotifyPropertyChanged и свойство TextBlock_Property имеет сигнализировать OnPropertyChanged("TextBlock_Property") событие для связывания будет обновляться.

private string _TextBlock_Property; 

    public string TextBlock_Property 
    { 
     get { return _TextBlock_Property; } 
     set { _TextBlock_Property = value; OnPropertyChanged("TextBlock_Property"); } 
    } 

Для того, чтобы уведомить/связанные элементы управления XAML, что данные изменились необходимо реализовать INotifyPropertyChange на класс, который хранит свойства, и его экземпляр находится в DataContext. Ниже приведен код, который я использую для реализации интерфейса INotifyPropertyChanged.

public class MyClass : INotifyPropertyChanged 
{ 
     /// <summary> 
     /// Event raised when a property changes. 
     /// </summary> 
     public event PropertyChangedEventHandler PropertyChanged; 

     /// <summary> 
     /// Raises the PropertyChanged event. 
     /// </summary> 
     /// <param name="propertyName">The name of the property that has changed.</param> 
     protected virtual void OnPropertyChanged(string propertyName) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) 
      { 
       handler(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 
} 

Чтобы увидеть эту операцию в ее полном объеме, проверить мой блог статью Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Binding.

+0

Можете ли вы объяснить мне вторую часть? Если я правильно понял первую часть, чтобы написать это в начале: класс MyClass: INotifyPropertyChanged – user2975038

+0

Я также получаю эту ошибку: «Project_Name.MyClass» не реализует элемент интерфейса «System.ComponentModel.INotifyPropertyChanged.PropertyChanged» – user2975038

+0

ОК исправлена ​​эта ошибка, но я до сих пор не нахожу ее работу – user2975038

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