2012-05-12 23 views
0

我有什麼:
1.在XAML中的文本塊
2.從包含DateTime的數據庫查詢?類型數據。

我該怎麼做:
1.我用DateTime聲明瞭一個類「myClass」?名爲「指明MyDate」

我想
1.參數顯示在文本塊[我知道]
2.當「指明MyDate」值爲空,顯示在文本塊一個字符串指明MyDate。 [我不知道,因爲Get方法只能返回DateTime?類型值,但不是字符串類型。]如何返回不同類型的參數?

回答

5

嘗試使用綁定您的文字塊這樣的:

<TextBlock Text="{Binding myDate, TargetNullValue='Your null message'"/> 
+0

工程就像一個魅力和容易像一塊。這個技巧是否適用於所有的綁定源類型可以爲空? –

+0

@AlbertGao我認爲它適用於所有可爲空的類型,但從未真正需要它,所以你必須開始試驗。 :D – BigL

+0

感謝@BigL以及所有在本文中付出時間的人:) –

0

聲明一個字符串變量;如果myDate不爲空,則爲其分配日期值 - 否則將其設置爲默認值。實例:

string stringToShow = null; 
if(myDate.HasValue) 
{ 
    stringToShow = myDate.Value.ToString(); 
} 
else 
{ 
    stringToShow = "other string"; 
} 

,或者更簡明的三元

string stringToShow = myDate.HasValue ? myDate.Value.ToString() : "other string"; 

然後示出了在文本塊stringToShow代替myDate。最後,你可以在一個擴展方法包裝這使它超級容易撥打:

public static string ToSpecialString(this DateTime? date) 
{ 
    return myDate.HasValue ? myDate.Value.ToString() : "other string"; 
} 

然後,你可以調用myDate.ToSpecialString()在前端。

+0

爲什麼是惡劣的工程實踐? –

+0

我一般對三元運算符不以爲然;如果你有另一種情況需要處理,或者需要做一些比簡單分配變量更復雜的事情,那麼你現在必須翻出一段舊代碼並用if/else代替它。基本上,它使維護您的代碼庫更多的工作。另外,它們使事情難以調試。 – eouw0o83hf

+1

在這種情況下,我認爲條件運算符*完全*有效。當然,如果你需要做更復雜的事情,那麼將它分解爲單獨的if/else子句是值得的,但對於這種特定情況 - 根據條件分配一個或另一個值 - 條件運算符是理想的。如果我在我維護的代碼庫中看到它,我會將第一個表單重構爲第二個表單。 –

0

你應該寫一個轉換器,當'is null'檢查並返回信息字符串時。

這將允許您直接從XAML使用標準數據綁定來完成,而不需要在代碼隱藏文件中添加任何代碼。

相關問題