2017-01-24 12 views
1

ObservableCollectionにバインドされたDataGridを持つWPFアプリケーションがあります。 コレクション型は、10進値のdouble型のプロパティを1つ以上含むクラスです。 私はそのようなデータグリッド-列を定義しているXAMLの場合:WPF DataGridで入力中にカンマをドットに置き換えます。

<DataGrid.Columns> 
    <DataGridTextColumn x:Name="col_LowerBound" 
         Binding="{Binding LowerBound, NotifyOnTargetUpdated=True, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" 
         Header="Lower bound"/> 
</DataGrid.Columns> 

あなたが見ることができるように、私の代わりにPropertyChangedのUpdateSourceTriggerのLostFocusを使用しています。 PropertyChangedの場合、入力は一度にすべてチェックされ、「。」などの文字がチェックされます。不可能になる。 LostFocusを使うことで、小数点をドットで入力することができます。

ここでもカンマを入力して、ドットで置き換えます。 KeyDownイベントまたはPreviewKeyDownイベントが発生している間にそれを置き換えることはできますか? KeyDownなどのケースで値を置き換える方法がわかりませんwith TextBoxは大きな助けにはなりません。

+1

[入力時にテキストボックスの文字を置き換えることはできますか?](http://stackoverflow.com/questions/18971198/can-you-replace-characters-in-a-textbox-as-you-タイプ)。あなたは確かに正しいアイデアを持っています。この質問とその答えは、あなたがこれを達成するために必要なすべての洞察を与えるはずです。 – Kilazur

+0

こんにちはキラズル。ありがとうございます。残念ながら、TextBoxはDataGridと同じではなく、そのセルです。一方、私はあなたが以下で見ることができるコンバータを使用してより良い解決策を見つけました。 –

+0

あなたは、コンバータの使用に関する答えの話の1つに気付くでしょう:p – Kilazur

答えて

3

私は、コンバータクラスを使用する真実でシンプルなソリューションを見つけました。

まず入力のカンマをドットで置き換えるコンバータクラスが必要です。 ジョークは、メソッドConvertとメソッドConvertBackで同じ置換を行う必要があることです。 :D

using System; 
using System.Globalization; 
using System.Windows.Data; 

namespace P16_StepFunctions 
{ 
    /// <summary> 
    /// Class for replacing comma by dot in input of decimal fields. 
    /// </summary> 
    public class DecimalConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return value.ToString().Replace(",", "."); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return value.ToString().Replace(",", "."); 
     } 

    } 
} 

その後、我々はそのようなコンバータクラスにウィンドウのXAMLでリソースを追加します。

<Window.Resources> 
    <local:DecimalConverter x:Key="decimalconverter"/> 
</Window.Resources> 

そして最後に、我々は、すべてのデータグリッドの列の結合に変換-属性を追加します小数点を含むものとする。 この属性は、コンバータをstaticresourceとして取得します。

<DataGridTextColumn x:Name="col_LowerBound" 
        Binding="{Binding LowerBound, NotifyOnTargetUpdated=True, Mode=TwoWay, UpdateSourceTrigger=LostFocus, Converter={StaticResource decimalconverter}}" 
        Header="Lower bound"/> 

これだけです。 これらのデータグリッドセルの1つを入力するときに、カーソルがセルを離れると、カンマはドットで置き換えられます。 "1,1,1"のような入力が間違っている場合、セルは赤い枠線になり、エラー記号 "!"が表示されます。データグリッド行の左側に自動的に表示されます。 その後、ユーザーは自分のミスを編集できます。

関連する問題