關於XAML,C#和WPF的更多思考的更多思考

gudesheng發表於2008-01-03

原文:More thoughts on more thoughts on XAML, C# and WPF 

 Charles在他的blog上,對我提出的關於WPF資料上下文和WPF可以忽略C#程式碼的闡述提出了疑問。

我也會盡我所能捍衛我的闡述。

具體來講,我很少從DependencyOjbect繼承物件,並且就從我觀察到的來看,離開了它,XAML和WPF在資料繫結上執行的都還不錯。

XAML所依賴的只是公有的可設定的屬性和不帶引數的公有的建構函式。單向的資料繫結也有類似的需求。

對於雙向的資料繫結,如果你執行了舊的pre-WPF介面INotifyPropertyChanged,執行起來也很棒,並且這種繫結實現起來也特別不值一提。

下面是我寫的一段C#程式碼,我希望通過它來說明這個問題:

 

public class Author : INotifyPropertyChanged {
  
string name;
  
bool lovesXaml;

  
public bool LovesXaml {
    
get return lovesXaml; }
    
set { lovesXaml = value; Notify("LovesXaml"); }
  }

  
public string Name {
    
get return name; }
    
set { name = value; Notify("Name"); }
  }


// boilerplate INotifyPropertyChanged code
  void Notify(string name) {
    
if (PropertyChanged != null)
      PropertyChanged(
thisnew PropertyChangedEventArgs(name));
  }


  
public event PropertyChangedEventHandler PropertyChanged;

}


 

接下來是一個簡單的WPF/XAML視窗,我們可以用一個DataTemplate來生成和編輯它:

 

<Window x:Class='Petzold.Window1'
   
xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
   
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
   
xmlns:local='clr-namespace:Petzold' 
   
Title='Petzold'
>
  
<ItemsControl>
       
<local:Author Name='Charles Petzold' LovesXaml='true'/>
       
='Chris Sells' LovesXaml='false'/>
       
='Ian Griffiths' LovesXaml='true'/>
       
='Chris Anderson' LovesXaml='false'/>
       
='Adam Nathan' LovesXaml='true'/>
   
>


   
<Window.Resources>
      
<DataTemplate DataType='{x:Type local:Author}'>
        
<StackPanel>
          
<StackPanel Orientation='Horizontal'>
             
我能夠生成一個Author類,這個類可以存在於一個分離的Dll中,除了對mscorlib.dll和system.dll的依賴外,它不再具有另外的依賴性,並且這個類執行起來表現也相當的良好。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1619924


相關文章