如何为多个文本框使用一个绑定来分隔 WPF XAML 中的三位数字?
Posted
技术标签:
【中文标题】如何为多个文本框使用一个绑定来分隔 WPF XAML 中的三位数字?【英文标题】:How do I use one binding for multiple text boxes to separate three-digit numbers in WPF XAML? 【发布时间】:2022-01-07 23:44:50 【问题描述】:我在 Visual Studio 2019 中使用 C# WPF
我想将我的 TextBoxes 值显示为像这样分隔的千位小数 1500.9 => 1,500.9
我选择 Validation Rules and Binding 来解决这个问题,因为我不想使用 C# Code Behind,另外一点是这个选项本身对文本框没有任何作用
StringFormat="0,0.0"
我的问题是什么:
我认为验证规则中的绑定使用这种类型的属性进行格式化, 我确实将所有文本框绑定到我的属性,现在所有文本框都具有相同的值,即使我更改了其中一个 enter image description here
我的项目:
这是我的模型名称Validator.cs
:
namespace WpfApp5
public class Validator
public double dbl_numeric get; set;
我的文本框绑定窗口:
<Window x:Class="WpfApp5.Budget_Default"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:gif="http://wpfanimatedgif.codeplex.com"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp5"
mc:Ignorable="d"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns:validate="clr-namespace:WpfApp5.Validation"
AllowDrop="True"
Height="550" Width="1033" >
<Grid x:Name="mygrid">
<TextBox x:Name="TextBox1" >
<Binding Path = "dbl_numeric" UpdateSourceTrigger = "PropertyChanged" StringFormat="0,0.0">
<Binding.ValidationRules>
<ExceptionValidationRule ValidatesOnTargetUpdated = "True"/>
<validate:RequeredViladation/>
</Binding.ValidationRules>
</Binding>
</TextBox>
<TextBox x:Name="TextBox2" >
<Binding Path = "dbl_numeric" UpdateSourceTrigger = "PropertyChanged" StringFormat="0,0.0">
<Binding.ValidationRules>
<ExceptionValidationRule ValidatesOnTargetUpdated = "True"/>
<validate:RequeredViladation/>
</Binding.ValidationRules>
</Binding>
</TextBox>
<TextBox x:Name="TextBox3" >
<Binding Path = "dbl_numeric" UpdateSourceTrigger = "PropertyChanged" StringFormat="0,0.0">
<Binding.ValidationRules>
<ExceptionValidationRule ValidatesOnTargetUpdated = "True"/>
<validate:RequeredViladation/>
</Binding.ValidationRules>
</Binding>
</TextBox>
</Grid>
我需要什么:
如何使用验证规则或其他东西来显示数千个分隔的十进制数字,以便为我的文本框使用字符串格式
长话短说:每个文本框应该分成 3 位数字,3 位数字只代表它自己的值
1500.9 => 1,500.9
【问题讨论】:
【参考方案1】:如果您只想格式化绑定到文本框的值,这就足够了:
<TextBox Text="Binding Path=dbl_numeric,StringFormat=0:N2" />
这将为您提供一个特定于文化的分隔符,用于千位和两位小数。
验证是另一个主题。请注意,开箱即用,WPF 将检查一个值是否可以解析为双精度值,并在文本框周围放置一个红色边框,例如,如果您输入文本。如果您希望允许用户在验证之前输入完整的值,您可能需要将 UpdateSourceTrigger
设置为 LostFocus
。如果您有其他验证需求,则必须手动添加。
您的三个文本框当前都绑定到模型中的相同值(通常是 WPF 中的视图模型)。
【讨论】:
感谢您的回答,那么如果只有 3 位数字分隔 3 位数字但值不一样,我该怎么办?我不希望他们我不希望他们都具有相同的价值 有没有办法只格式化一个文本框字符串?无绑定 我认为没有绑定会更难实现格式化;事实上,WPF 已为此设计,以便在绑定中发挥最佳功能。首先,WPF 被设计为使用(视图)模型和视图之间的绑定。我不确定您的第一条评论;您可以简单地在您的(视图)模型上声明三个属性并将它们中的每一个绑定到一个单独的文本框。 谢谢,我做了你伤心的事,但现在当我输入数字时,选择开始无法正常工作 选择开始是什么意思?以上是关于如何为多个文本框使用一个绑定来分隔 WPF XAML 中的三位数字?的主要内容,如果未能解决你的问题,请参考以下文章