Template10でUWPを使用しています。 Template10.ViewModelBase
は変更通知を管理します。我々は、ViewModel.Cost
に束縛されたCostTextBlock
を持っています。 ViewModel.Cost
が更新されるとコンバータCostTextBlock
が更新されます。関数にバインドすると、コストは正しい形式でレンダリングされますが、更新されません。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);
}
}
このほかのViewModelで私たちは、コスト更新:App.xamlで
this.Cost = null;
を私たちは、コンバータを定義:ビューで
<T10Converters:StringFormatConverter x:Key="PriceConverter" Format="{}{0:N2}"/>
:
私たちが持っているのViewModelでText="{x:Bind ViewModel.Cost,Mode=OneWay, Converter={StaticResource PriceConverter}}"/>
オーダーとコストレンダリングのビューを読み込むことができます。コンバーターを使用すると、Costがnullに設定されていると、変更がビューに反映されます。
は、我々はまた、コンバータと同じことの方法があります:ビューのXAMLは、これは正しくビューでコストをフォーマット
Text="{x:Bind Helpers:Globalisation.FormatPrice(ViewModel.Cost),Mode=OneWay}"
ある
public static string FormatPrice(decimal? price)
{
if (price == null)
return null;
return ((decimal)price).ToString("N2");
}
その場合は、しかし、コンバーターthis.Cost = null;
と同じコードを使用しても、コストが更新されてもビューは更新されません。
なぜViewModel.Cost
への更新がFormatPrice
にバインドされていると、CostTextBlock
に更新が反映されないのですか?
コストが* null *の場合にのみ機能しますか?コストが* null *の場合、何が起こるか/表示されるべきですか?コストがnullの場合は文字列を空にしないでください。 – Romasz
@Romasz Costがnullの場合、ビューには空白のコストが表示されます。これはコンバータを使用する場合です。コントロールをFormatPriceにバインドすると、ビュー内のコストは更新されません。 String.Emptyを返すようにFormatPriceを変更すると、違いはありません。ビュー内のコストはまだ更新されません。 – Vague
nullの場合は0.0を返すほうがよいでしょうか?第2に、コンバーターがどのように実装されているかを見ると、コンバータとスタティックメソッドの両方で動作するnullケースの理由として、 – mvermef