有没有一种方法可以将
decimal
与WPF TextBox绑定,并指定一个StringFormat
(在这种情况下是货币)?我已经尝试使用View Model中的属性来实现,但在TextBox中进行编辑时会变得有点奇怪,因为它会在每次按键后尝试应用格式化:public string Moneys
{
get
{
return string.Format("{0:C}", Model.Moneys);
}
set
{
if ( decimal.TryParse(value, NumberStyles.Currency, null, out decimal decimalValue) )
{
Model.Moneys = decimalValue;
}
}
}
我尝试设置了DataContext
并使用了Xaml数据绑定。Xaml:
<TextBox Text="{Binding Path=Moneys, StringFormat=C0}" />
代码后台:
this.WhenAnyValue(x => x.ViewModel.Model)
.Subscribe(x =>
{
DataContext = x;
});
然而,在更改 DataContext
后,{Binding}
没有如我所预期的那样改变。
有没有一种方法可以使用 this.Bind
并指定 StringFormat
?对我来说,这将是理想的解决方案。
更新
在设置 DataContext
的情况下,我意识到应该将其分配给 ViewModel
,当 ViewModel.Model
更改时,模板会正确地反映出更改。以下是我的更新后的 xaml:
<TextBox Text="{Binding Path=Model.Moneys, StringFormat=C0}" />
然而,我仍然想知道你是否可以使用ReactiveUI
在代码后端设置StringFormat
。