私はWPFプログラムを作成しており、スタイルやテンプレートなどの繰り返し可能な方法を使用して、TextBox内のデータをフォーマットする方法を見つけようとしています。私はたくさんのTextBox(正確には95)を持っており、それぞれが独自の数値データにバインドされており、それぞれが独自の解像度を定義できます。たとえば、データが解像度2の99.123の場合、99.12と表示されます。同様に、99のデータ値と解像度3は、99.000(99ではなく)として表示されます。これを行う方法はありますか?
編集: 明確にする必要があります。現在作業している画面には95個のTextBoxがありますが、プログラムのさまざまな画面全体のすべてのTextBoxに正しい小数点以下の桁数を表示させたいと思います。今考えてみると、これらのいくつかはTextBox(現在作業している画面など)であり、いくつかはDataGridsまたはListViewsですが、TextBoxで機能させる方法を理解できれば、理解できると確信しています。他のコントロールにも使用できます。
この場合、共有するコードはそれほど多くありませんが、より明確にするように努めます。
次のプロパティ(vb.net)を含むビューモデルがあります。
Public ReadOnly Property Resolution As Integer
Get
Return _signal.DisplayResolution
End Get
End Property
Public ReadOnly Property Value As Single
Get
Return Math.Round(_signal.DisplayValue, Resolution)
End Get
End Property
XAMLには次のものがあります。
<UserControl.Resources>
<vm:SignalViewModel x:Key="Signal" SignalPath="SomeSignal"/>
</UserControl.Resources>
<TextBox Grid.Column="3" IsEnabled="False" Text="{Binding Path=Value, Source={StaticResource Signal}, Mode=OneWay}" />
EDIT2(私の解決策): しばらくコンピューターから離れた後、私は顔を見つめている簡単な答えを見つけるために戻ってきました。ビューモデルでデータをフォーマットします!
Public ReadOnly Property Value As String
Get
Return (Strings.FormatNumber(Math.Round(_signal.DisplayValue, _signal.DisplayResolution), _signal.DisplayResolution))
End Get
End Property
IValueConverter
?を使用します 実際の値と解像度をコンバーターに渡し、コンバーターがそれ自体の中で切り上げを行うようにします。StringFormat
これらの95がどのように正確にTextBox
生成されるかを知らずに提案するのは難しいです。