Я пишу програму WPF і намагаюся знайти спосіб форматування даних у TextBox за допомогою якогось повторюваного методу, такого як стиль або шаблон. У мене багато TextBox (точніше 95), і кожен з них прив’язаний до власних числових даних, кожна з яких може мати власну роздільну здатність. Наприклад, якщо дані дорівнюють 99.123 з роздільною здатністю 2, вони повинні відображати 99.12. Аналогічним чином значення даних 99 та роздільна здатність 3 повинні відображатися як 99 000 (а не 99). Чи є спосіб зробити це?
Редагувати: слід уточнити, на поточному екрані, над яким я працюю, є 95 TextBox, але я хочу, щоб кожен TextBox на різних екранах моєї програми відображав правильну кількість знаків після коми. Тепер, коли я замислююся над цим, деякі з них є TextBoxes (наприклад, екран, над яким я зараз працюю), а деякі - DataGrids або ListViews, але якщо я можу зрозуміти, як змусити його працювати для TextBoxes, я впевнений, що можу зрозуміти це також для інших елементів управління.
У цьому випадку не так багато коду, яким можна поділитися, але я спробую зробити це зрозумілішим:
У мене є модель перегляду, яка містить такі властивості (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
не знаючи, як самеTextBox
генеруються ці 95 .