關於XAML,C#和WPF的更多思考的更多思考
原文: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(this, new PropertyChangedEventArgs(name));
}
public event PropertyChangedEventHandler PropertyChanged;
}
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(this, new 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'>
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'>
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1619924
相關文章
- 關於Fork和Malloc的思考
- 關於面試的思考面試
- 關於Ioc的思考
- 關於難點的思考
- 關於“開源”的思考
- 關於語言的思考
- 關於ETL工具的思考
- 作業系統思考 第五章 更多的位與位元組作業系統
- 關於重寫equals()和hashCode()的思考
- 關於樹上路徑異或和的思考
- 關於主資料的實踐和思考
- 關於中介軟體的思考
- 關於限流實現的思考
- 關於寫部落格的思考
- 關於Flux,Vuex,Redux的思考VueRedux
- 關於測試流程的思考
- 關於前端的思考與感悟前端
- 關於技術分享的思考
- 關於創業的思考薦創業
- 關於產品的若干思考
- 關於工廠模式的思考模式
- 關於JS的物件導向的思考和總結JS物件
- 關於程式碼版本管理的思考和建議
- 關於研發效能提升的思考
- 關於運營邊界的思考
- 關於-生物資訊-入門-的思考
- 關於近期幣安事件的思考事件
- 關於同步的一點思考-下
- 最近關於工作的幾點思考
- 關於git flow的一點思考Git
- 關於知識付費的思考
- 關於 PHP 框架的簡單思考PHP框架
- 關於PWA落地問題的思考
- 關於json的幾點思考JSON
- 關於系統高可用的思考
- 關於Rich Client設計的思考client
- 關於設計原則的思考
- 關於Java棧與堆的思考Java