Nous utilisons UWP avec Template10. Template10.ViewModelBase
gère la notification de modification. Nous avons un CostTextBlock
lié à ViewModel.Cost
. En utilisant un convertisseur CostTextBlock
mises à jour lorsque ViewModel.Cost
mises à jour. Lorsque nous lions à une fonction, le rendu des coûts dans le format correct, mais ne met pas à jour. Dans le ViewModel, nous avons:UWP TextBlock ne se met pas à jour lorsqu'il est lié à la fonction
public class ViewModel : ViewModelBase
{
decimal? _Cost = default(decimal?);
public decimal? Cost
{
get
{
return _Cost;
}
set
{
if (value == 0) value = null;
Set(ref _Cost, value);
}
}
Ailleurs dans le ViewModel nous mettons à jour Coût:
this.Cost = null;
En App.xaml nous définissons le convertisseur:
<T10Converters:StringFormatConverter x:Key="PriceConverter" Format="{}{0:N2}"/>
De l'avis:
Text="{x:Bind ViewModel.Cost,Mode=OneWay, Converter={StaticResource PriceConverter}}"/>
Nous pouvons charger la vue avec une commande et le rendu des coûts est correct. En utilisant le convertisseur, lorsque Cost est défini sur null, la modification est reflétée dans la vue.
Nous avons aussi une méthode qui fait la même chose que le convertisseur:
public static string FormatPrice(decimal? price)
{
if (price == null)
return null;
return ((decimal)price).ToString("N2");
}
Dans ce cas, le XAML dans la vue est
Text="{x:Bind Helpers:Globalisation.FormatPrice(ViewModel.Cost),Mode=OneWay}"
Formate correctement le coût de la vue, mais le Le même code utilisé avec le convertisseur this.Cost = null;
ne met pas à jour la vue même si le coût a été mis à jour. Pourquoi est-ce que CostTextBlock
ne reflète pas les mises à jour de ViewModel.Cost
lorsqu'il est lié à FormatPrice
?
Cela signifie-t-il que cela ne fonctionne pas uniquement lorsque le coût est * nul *? Que devrait-il se passer/être montré quand le coût est * null *? Ne devrait pas être la chaîne vide quand le coût est nul? – Romasz
@Romasz Lorsque le coût est nul, la vue doit afficher le coût en blanc. C'est le cas lorsque nous utilisons le convertisseur. Lorsque je lier le contrôle à FormatPrice, Coût n'est pas mis à jour dans la vue. Si je change FormatPrice pour retourner String.Empty, cela ne fait aucune différence. Le coût ne se met toujours pas à jour dans la vue. – Vague
ne serait-il pas mieux de retourner 0.0 sur le cas nul? Deuxièmement, regardez comment le convertisseur est mis en œuvre, il pourrait vous éclairer comme la raison pour laquelle le cas de null fonctionne avec le convertisseur par rapport à la méthode statique. – mvermef