在ViewModel之外更改TextBox.Text

时间:2013-04-21 17:22:54

标签: c# wpf xaml

我将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);
        }
    }

1 个答案:

答案 0 :(得分:4)

你不应该做那样的事情。

如果您需要以不同方式format TextBox中的输出,请使用Converter,例如

Text="{Binding Display, Mode=OneWay, Converter={StaticResource myconverter}}"  

(转换器还支持转换back,因此从您输入的值转换为显示 - 例如,不确定这是否是您想要的,但您可以在输出到屏幕时添加额外的格式,并在“存储”时将其删除财产)

或者,如果可能的话,只使用{Binding Display, StringFormat=...}"