gpt4 book ai didi

c# - 使用 ReactiveUI 绑定(bind) TextBox 并保持货币格式

转载 作者:太空宇宙 更新时间:2023-11-03 12:23:28 25 4
gpt4 key购买 nike

有没有办法将 decimal 绑定(bind)到 WPF TextBox 并指定 StringFormat(在本例中为 Currency)?我尝试使用 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 数据绑定(bind)。 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 更改时, 模板反射(reflect)了它应该的变化。这是我更新的 xaml:

<TextBox Text="{Binding Path=Model.Moneys, StringFormat=C0}" />

但是,我还是想知道您是否可以使用ReactiveUI在后面的代码中设置StringFormat

最佳答案

您可以使用内联绑定(bind)转换器,在后面的代码中进行绑定(bind)(您的文本框需要一个名称):

this.Bind(
ViewModel,
x => x.ViewModel.Model.Moneys,
x => x.nameOfTheTextbox,
x => ConvertToText(x),
x => ConvertToDec(x));

和方法:

private string ConvertToText(decimal value)
{
return string.Format("{0:C}", value);
}

private decimal ConvertToDec(string value)
{
decimal result;
if (!decimal.TryParse(value, NumberStyles.Currency, null, out result))
{
result = 0;
}
return result
}

关于c# - 使用 ReactiveUI 绑定(bind) TextBox 并保持货币格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46211852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com