2011-07-10 38 views
-2
public class myClass : INotifyPropertyChanged 
    { 
     public string myName(string myNameIs) 
     { 
      Name = myNameIs; 
      return myNameIs; 
     } 


     public string My = "Hasan"; 
     public string Name { 

      get { return My; } 
      set 
      { 
       My = value; 
       OnPropertyChanged("Name"); 
      } 

     } 

     public event PropertyChangedEventHandler PropertyChanged; 
     private void OnPropertyChanged(string propertyName) 
     { 
      if (this.PropertyChanged != null) 
      { 
       // Raise the PropertyChanged event 
       this.PropertyChanged(this, new PropertyChangedEventArgs(
       propertyName)); 
      } 
     } 
    } 

。 XAML:如何將一個屬性與文本塊綁定從一個類

<TextBlock Height="42" Margin="107,245,0,0" TextWrapping="Wrap" Text="{Binding Name}" VerticalAlignment="Top" HorizontalAlignment="Left" Width="159" DataContext="{Binding Source={StaticResource myClassDataSource}}"/> 

這是行得通的。但是,當我更新屬性,那麼它不工作?

回答

1

您只需將TextBlock(或其父級的)DataContext屬性設置爲此類的一個實例即可。 接下來的Text屬性綁定到後盾財產這樣

<TextBlock Text="{Binding Name}"/> 

試圖通過一些教程上線(或一本書),而不是試圖通過僞造自己的方式。一旦你瞭解DataBinding的工作方式,這很容易。

更新:一旦我正確格式化你的問題,我可以看到你正在使用的XAML ...

這裏的錯誤是,你要使用ElementName屬性(它用於一個UI綁定元素與另一個名稱)。這不是你想要達到的。

3

你的代碼相當混亂,你似乎在與它的所有地方。我知道這是不是你問的問題,但我想我會指出這一點,反正:

  • 你的成員變量聲明爲public(public string My = "Hasan";
  • 你的成員變量有一個完全不同的名稱,其財產(MyName
  • 你有一個用於公共屬性的設置,並且還設置功能(myName(string myNameIs)
  • 您返回自整定功能相同的值,你
通過什麼

這裏是你如何可以重寫它的一個例子:

public class MyClass : INotifyPropertyChanged 
{ 
    //normal default constructor 
    public MyClass() 
    { 
     _name = "Hasan"; 
    } 

    //extra constructor for when you need to set the name to something other than the default 
    //although this is really only useful if you have no setter on the Name property 
    public MyClass(string name) 
    { 
     _name = name; 
    } 

    public string Name 
    { 

     get { return _name; } 
     set 
     { 
      _name = value; 
      OnPropertyChanged("Name"); 
     } 

    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
     { 
      // Raise the PropertyChanged event 
      this.PropertyChanged(this, new PropertyChangedEventArgs(
      propertyName)); 
     } 
    } 

    private string _name; 
} 
+0

應如何XAML代碼爲'TextBlock'是什麼樣子?我是否需要將XAML的'DataContext'設置爲該類的一個實例? – BrunoLM

相關問題