2010-04-16 24 views
11

在WPF中很容易使用ValueConverter格式化值等使用ValueConverter與數據綁定,(在我們的情況下將一些號碼爲不同的單位,例如公里英里)我如何的WinForms

我知道它可以在Winforms中完成,但我所有的Googleing都只是爲WPF和Silverlight帶來結果。

+0

相關:http://stackoverflow.com/q/3430217/240733 – stakx 2015-10-04 07:13:22

回答

16

如果您能夠並願意使用自定義屬性修飾數據源屬性,則您可以use a TypeConverter

否則,您必須附加Binding對象的ParseFormat事件。不幸的是,這不需要使用設計器來綁定除了最簡單的場景以外的所有設備。

例如,假設你想綁定到較公里的整列TextBox和你想在英里的可視化表示:

在構造函數中:

Binding bind = new Binding("Text", source, "PropertyName"); 

bind.Format += bind_Format; 
bind.Parse += bind_Parse; 

textBox.DataBindings.Add(bind); 

...

void bind_Format(object sender, ConvertEventArgs e) 
{ 
    int km = (int)e.Value; 

    e.Value = ConvertKMToMiles(km).ToString(); 
} 

void bind_Parse(object sender, ConvertEventArgs e) 
{ 
    int miles = int.Parse((string)e.Value); 

    e.Value = ConvertMilesToKM(miles); 
} 
+1

值得一提的是,這種技術只會涉及綁定對象被使用和暴露的場景。它不適用於網格和其他複雜的綁定控件,除非它們擁有自己的格式/分析API。因此,不幸的是,在WinForms數據綁定機制中確實沒有使用值轉換器的「通用」方法。 – Crono 2014-09-10 18:55:58

5

另一種選擇是爲窗體顯示特定的ViewModel,該窗體以需要在窗體上顯示的格式顯示數據。您可以使用AutoMapper並自行構建您自己的Formatter來輕鬆實現。

這樣你也可以完全支持設計師。

相關問題