Привязки обновлений Silverlight - PullRequest
1 голос
/ 02 августа 2010

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

    <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>

Ответы [ 3 ]

2 голосов
/ 02 августа 2010

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

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

Однако вам нужен способ уведомить пользовательский интерфейс об изменении свойства, чтобы пользовательский интерфейс мог обновляться сам. Это цель интерфейса 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
 }

При реализации этого интерфейса привязка будет обновлять значение в пользовательском интерфейсе при каждом изменении свойства привязки.

2 голосов
/ 02 августа 2010

Ваш класс со свойством 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));
        }
    }
}
1 голос
/ 02 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...