2016-12-02 5 views
1

UWPに2つのTextBoxがあります。これらは、モデルエンティティの整数プロパティと小数プロパティにバインドされています。整数プロパティが保存されなく小数点エラーが返されるUWP TextBoxからDecimalプロパティを保存できません

Cannot save value from target back to source. BindingExpression: Path='ComponentDec' DataItem='Orders.Component'; target element is 'Windows.UI.Xaml.Controls.TextBox' (Name='null'); target property is 'Text' (type 'String'). 

関連XAMLである:

    <ListView 
         Name="ComponentsList" 
         ItemsSource="{Binding Components}"> 
         <ListView.ItemTemplate> 
          <DataTemplate> 
           <StackPanel Orientation="Horizontal"> 
            <TextBox Text="{Binding ComponentInt,Mode=TwoWay}"></TextBox> 
            <TextBox Text="{Binding ComponentDec,Mode=TwoWay,Converter={StaticResource ChangeTypeConverter}}"></TextBox> 
           </StackPanel> 
          </DataTemplate> 
         </ListView.ItemTemplate> 
        </ListView> 

エンティティクラス:

public class Component 
{ 
    public string ComponentCode { get; set; } 
    public string ComponentDescription { get; set; } 
    public int ComponentInt { get; set; } 
    public decimal ComponentDec { get; set; } 
    public override string ToString() 
    { 
     return this.ComponentCode; 
    } 
} 

コンバータは恥知らずテンプレート10から借りました。

public class ChangeTypeConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     if (targetType.IsConstructedGenericType && targetType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) 
     { 
      if (value == null) 
      { 
       return null; 
      } 
      targetType = Nullable.GetUnderlyingType(targetType); 
     } 

     if (value == null && targetType.GetTypeInfo().IsValueType) 
      return Activator.CreateInstance(targetType); 

     if (targetType.IsInstanceOfType(value)) 
      return value; 

     return System.Convert.ChangeType(value, targetType); 
    } 

decimalプロパティが保存されないのはなぜですか?

+0

"10進数"を "10進数"に変更してみてください。型変換器はnull可能な何かを探しているので – RoguePlanetoid

+0

ありがとう@RoguePlanetoidが、それと同じエラーを試みました。 – Vague

+1

私はデバッグを少しして、値を保存しようとすると、 'ConvertBack'メソッドの' Type targetType'は 'System.Decimal'ではなく' System.Object'ですが、なぜ私はなぜそう思うのか分かりません。 DecimalValueConverterを書くのはどうですか? – schumi1331

答えて

1

私はx:BindtargetTypeSystem.Decimalとして渡すことができますので、これがあると思う、それはBinding ComponentDecx:Bind ComponentDec

を変更することで動作するようになりました。一方、BindingtargetTypeSystem.Objectとしています。

Bindingを使用するには、@ schumi1331としてDecimalConverterを書く必要があります。

関連する問題