WPF绑定中的值舍入

4

我正在尝试实现一个带有文本框的进度条,文本框还显示进度百分比。但是百分比是小数形式的。是否可以通过绑定来四舍五入数据集中返回的值,或者必须通过代码进行处理?

<ProgressBar Grid.Row="2" Grid.ColumnSpan="2" Height="25" HorizontalAlignment="Stretch"  Margin="5,5,5,2" Name="pbProgressIndex" VerticalAlignment="Top" Width="Auto" Value="{Binding Path=ProgressIndex, Mode=OneWayToSource}" />
<TextBlock Grid.Row="2" Grid.ColumnSpan="2" Height="25" Name="txtProgressIndex" Text="{Binding Path=ProgressIndex, Mode=OneWayToSource}" Width="Auto" Foreground="Black" FontWeight="Bold" FontSize="14" FontFamily="Verdana" Padding="5" Margin="5,5,5,5" TextAlignment="Center" />
3个回答

6
使用绑定的StringFormat属性,例如:
{Binding Path=ProgressIndex, Mode=OneWayToSource, StringFormat=N2}

"

也可以通过以下方式指定N2格式:

"
{}{0:N2}}

最终我修改了数据集,使其在输入时四舍五入,然后使用以下代码: Text="{Binding Path=ProgressIndex, Mode=OneWay, StringFormat={}{0}%}" - jasonk
字符串格式应为“N2”,格式说明符(字母)需要放在前面。请参阅.NET文档中的标准格式字符串:https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings - mark.monteiro

5
StringFormat={}{0:#.00}

我觉得这样看起来更好一些哦;)


1
除了Femaref的答案中提到的StringFormat之外,您还需要摆脱Mode=OneWayToSource设置。该模式用于从控件向绑定对象(如ViewModel)推送值,而不接收来自代码对该值所做的更新,这与您尝试做的相反。您需要这些的单向模式,这恰好是TextBlock.Text的默认模式。ProgressBar.Value默认情况下使用TwoWay,在这种情况下仍将正常工作,但您也可以将其设置为Mode=OneWay。

好的,注意到了。在看答案之前我就发现了(耶!复制粘贴),但是因为注重细节所以加一分。 - jasonk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接