我将TextBox的Text绑定到我的ViewModel类中的属性,如下所示:
Text="{Binding Display, Mode=OneWay}"
问题是我需要格式化TextBox文本而不更改ViewModel中的支持Display属性(我需要保持字符串中的精度)。我可以在ViewModel中创建另一个属性,但在View类中更改它对我来说似乎更清晰。问题是,在第一次从View类更新Text之后,数据绑定将丢失,并且不会再进行更新。
如何在操作Text属性后恢复数据绑定,为下次Display属性更改做好准备?
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
const int maxForDisplay = 12;
TextBox _display = sender as TextBox;
if (_display.Text.Length > maxForDisplay)
{
_display.Text = _display.Text.Substring(0, maxForDisplay);
}
}
答案 0 :(得分:4)
你不应该做那样的事情。
如果您需要以不同方式format
TextBox中的输出,请使用Converter
,例如
Text="{Binding Display, Mode=OneWay, Converter={StaticResource myconverter}}"
(转换器还支持转换back
,因此从您输入的值转换为显示 - 例如,不确定这是否是您想要的,但您可以在输出到屏幕时添加额外的格式,并在“存储”时将其删除财产)
或者,如果可能的话,只使用{Binding Display, StringFormat=...}"