我們使用UWP和Template10。 Template10.ViewModelBase
管理變更通知。我們有一個CostTextBlock
綁定到ViewModel.Cost
。 ViewModel.Cost
更新時使用轉換器CostTextBlock
更新。當我們綁定到一個函數時,Cost會以正確的格式呈現,但不會更新。 在視圖模型,我們有:當綁定到函數時,UWP TextBlock不會更新
public class ViewModel : ViewModelBase
{
decimal? _Cost = default(decimal?);
public decimal? Cost
{
get
{
return _Cost;
}
set
{
if (value == 0) value = null;
Set(ref _Cost, value);
}
}
別處在視圖模型,我們更新成本:
this.Cost = null;
在App.xaml中,我們定義轉換器:
<T10Converters:StringFormatConverter x:Key="PriceConverter" Format="{}{0:N2}"/>
在視圖:
Text="{x:Bind ViewModel.Cost,Mode=OneWay, Converter={StaticResource PriceConverter}}"/>
我們可以使用訂單加載視圖並正確呈現成本。使用轉換器時,當「成本」設置爲空時,更改將反映在視圖中。
我們也有不一樣的轉換器的方法:
public static string FormatPrice(decimal? price)
{
if (price == null)
return null;
return ((decimal)price).ToString("N2");
}
在這種情況下,在視圖中XAML是
Text="{x:Bind Helpers:Globalisation.FormatPrice(ViewModel.Cost),Mode=OneWay}"
這正確地格式化在視圖中的成本,但是即使更新成本,轉換器this.Cost = null;
使用的相同代碼也不更新視圖。
爲什麼CostTextBlock
不反映更新到ViewModel.Cost
當它綁定到FormatPrice
?
這是否意味着它僅在成本爲* null *時才起作用?當成本爲* null *時應該發生什麼?成本爲空時不應該爲空字符串? – Romasz
@Romasz當成本爲空時,視圖應顯示空白成本。當我們使用轉換器時就是這種情況。當我將控件綁定到FormatPrice時,視圖中的成本不會更新。如果我將FormatPrice更改爲返回String.Empty,則沒有區別。成本仍然不會在視圖中更新。 – Vague
在null情況下返回0.0會不會更好?其次,看看轉換器是如何實現的,它可能會啓發你作爲空轉換器與靜態方法相結合的原因。 – mvermef