2010-08-02 2 views
1

У меня есть шаблон элемента с изображением и текстовым блоком. И текстовый блок привязан к свойству Name. Все работает нормально, пока я не пытаюсь обновлять свои данные. Когда я устанавливаю на свое исходное имя новое имя в дереве, я вижу старое имя. Как обновить текст внутри шаблона элемента?привязки обновления Silverlight

<my:TreeView.ItemTemplate> 
     <toolkit:HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
      <StackPanel Orientation="Horizontal"> 
       <Image Source="{Binding Icon}" Width="20" Height="20" /> 
       <TextBlock Text="{Binding Name}" Height="20" TextAlignment="Center" HorizontalAlignment="Center" /> 
      </StackPanel> 
     </toolkit:HierarchicalDataTemplate> 
    </my:TreeView.ItemTemplate> 
+0

Добавляет новое свойство - единственный способ изменить мои данные управления ??? Могу ли я использовать метод как refreshBinding(); или пользовательские данные обновления? – Evgeny

ответ

2

Ваш класс с Name собственности должны осуществлять System.ComponentModel.INotifyPropertyChanged интерфейс для уведомления в интерфейсе WPF, что значение свойства было изменено. Что-то вроде следующего:

class MyClass : System.ComponentModel.INotifyPropertyChanged 
{ 
    private String _name; 
    public String Name 
    { 
     get { return _name; } 
     set { _name = value; RaisePropertyChanged("Name"); } 
    } 

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 
    protected void RaisePropertyChanged(String propertyName) 
    { 
     System.ComponentModel.PropertyChangedEventHandler temp = PropertyChanged; 
     if (temp != null) 
     { 
      temp(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
2

Ваше Name свойство выглядит, вероятно, выглядит примерно так: -

public class MyClass 
{ 
    public string Name {get; set; } 
} 

Однако вам нужен способ, чтобы уведомить UI, что свойство изменилось, так что интерфейс может обновляться , То есть цель интерфейса INotifyPropertyChanged: -

public class MyClass : INotfyPropertyChanged 
{ 
    string _name; 
    public string Name 
    { 
     get {return _name; } 
     set { _name = value; NotifyPropertyChanged("Name"); } 
    } 

    private void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)) 
    } 
    public event PropertyChangedEventHandler PropertyChanged 
} 

С помощью этого интерфейса реализован связывание будет обновлять значение в пользовательском интерфейсе, когда связанное свойство изменяется.

1

сделать «Имя» как свойство зависимости. Он имеет встроенную функцию changeNotification.

+2

Работает только в том случае, если связанный объект является элементом FrameworkElement. –

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