2010-08-02 109 views
1

我有圖像和文本塊的項目模板。和文本塊綁定到名稱屬性。一切工作正常,而我不想更新我的數據。當我在樹中設置我的源節點新名稱時,我看到了舊名稱。如何更新項目模板內的文本?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 2010-08-02 13:23:00

回答

2

您與Name屬性類必須實現System.ComponentModel.INotifyPropertyChanged接口通知到該屬性值已經改變了WPF UI。像下面這樣:

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可以更新自己的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 
} 

有了實現此接口的綁定,只要綁定屬性更改將更新UI的價值。

1

使「名稱」爲依賴屬性。它具有內置的更改通知功能。

+2

僅當綁定對象是FrameworkElement時纔有效。 – 2010-08-02 12:51:48