2014-09-08 1 views
0

Je vais avoir des problèmes de liaison à une décimale dans IronPythonBind en décimal dans IronPython

Voici un exemple de code (je utilise Bojan Delic's IronPythonMVVM Library Wich je ne l'ai pas mis au rebut encore faire partie de la question)

from decimal import * 
class MyObject(ViewModel): 
    ..... 
    value = Notifiable(Decimal('0.0')) 

Et puis en XAML:

<ListView Grid.Row="5" Grid.ColumnSpan="3" Margin="3" ItemsSource="{Binding Path=results}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <WrapPanel> 
       .... 
       <TextBlock Text="{Binding Path=value, StringFormat=N2}" /> 
      </WrapPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Et au lieu de la valeur dans l'objet, je reçois

IronPython.NewTypes.System.Object_1$1 

Évidemment j'obtiens le type d'objet plutôt que la valeur décimale que l'objet devrait représenter. En le liant à un DecimalUpDown de la bibliothèque Xceed.WPF.ToolKit, affiche une entrée vide, bien que si je place une valeur ou que j'utilise les boutons haut/bas, il affichera alors une valeur et placera cette valeur dans l'objet sous-jacent. Alors, pourquoi ne puis-je pas afficher la valeur de l'objet?

+0

Je suggère de supprimer votre modification, en ajoutant la solution ci-dessous comme réponse (sans la question) et poser une autre question à propos de cette liaison liant. Mais je parierais que la liaison ne "sait" pas comment gérer le type décimal d'IP, et que si vous appeliez ToString (ou equiv) sur la décimale d'IP, vous obtiendriez "IronPython.NewTypes.System.Object_1 $ 1" – Will

+0

oui - ToString me donne que si str () donne la valeur – 537mfb

+0

Oui, WPF ne sait rien sur les types IronPython. S'il ne le reconnaît pas comme un type .net primitif, il appellera ToString dessus. Vous aurez donc besoin de créer un ValueConverter, si IronPython (ou quelqu'un d'autre, vérifiez nuget) ne les fournit pas. – Will

Répondre

0

supprimant la ligne from decimal import * et le remplacement de la '0.0' avec 0 dans le constructeur Decimal fait tout correctement. D'après ce que je comprends, j'utilise maintenant System.Decimal de .NET plutôt que le propre type décimal d'IronPython.