如何更改(即切换)WPF控件的绑定StringFormat属性?

时间:2015-02-26 20:12:39

标签: c# wpf xaml string-formatting code-behind

我有一个WPF TextBox,它在XAML中绑定了它的文本值。这很好,并且正如预期的那样,当关联的值加载到字段时,它会根据需要进行格式化。

我的问题是当用户输入文本字段来修改值时,我想去除格式,并显示原始基础值。

为此,我尝试在BindingExpression.ParentBinding.StringFormat事件中的文本框绑定上设置GotFocus属性。但是,当我尝试将StringFormat属性设置为空字符串时,我得到以下异常:

  

使用后无法更改绑定。

因此,在将控件绑定到数据模型对象之后,是否有一种直接的方法可以修改TextBox的字符串格式?我愿意改变格式化控件值的方式,但最终的目的是在编辑数据时去除数据格式,并在用户退出字段后重新设置字符串格式。 / p>

1 个答案:

答案 0 :(得分:1)

我可能会尝试不同的方式。听起来您使用相同的TextBox作为格式化值并编辑原始值。使用两个不同的TextBox进行查看和编辑,或将其打包在UserControl中会更清晰。另外,我会使用两个属性,例如RawTextFormattedTextUserControl将具有与两个属性绑定的DependencyProperties。 UserControl会自动切换到编辑文本框。 “自动切换如何”工作的问题可能是一个挑战。您可能需要使用View TextBox的GotFocus,尽管使用实际的Edit按钮为您切换它可能不是一个坏主意。

我理解切换到WPF。切换到WPF时有相当多的调整(也就是学习)。我认为它是设计一个“适合目的”的形式或控件。您不必创建新的UserControl。您可以执行类似于StackOverflow的操作,其中有一个Edit TextBox,然后是View区域,它等同于Raw和Formatted值。当您处于编辑模式时,您将通过BoolToVisibilityConverter控制编辑文本框的可见性。在ViewModel上创建一个public bool IsEditing属性并将其绑定到<EditTextBox Visibility="{Binding IsEditing, Converter={StaticResource BoolToVisibilityConverter}}" Text="{Binding RawText}" ...etc... />使用WPF一段时间后,你真的很感激数据绑定,这使得很难回到简单的WinForms(至少对我而言) - 不是说没有挑战!)。