我有一个WPF TextBox
,它在XAML中绑定了它的文本值。这很好,并且正如预期的那样,当关联的值加载到字段时,它会根据需要进行格式化。
我的问题是当用户输入文本字段来修改值时,我想去除格式,并显示原始基础值。
为此,我尝试在BindingExpression.ParentBinding.StringFormat
事件中的文本框绑定上设置GotFocus
属性。但是,当我尝试将StringFormat
属性设置为空字符串时,我得到以下异常:
使用后无法更改绑定。
因此,在将控件绑定到数据模型对象之后,是否有一种直接的方法可以修改TextBox
的字符串格式?我愿意改变格式化控件值的方式,但最终的目的是在编辑数据时去除数据格式,并在用户退出字段后重新设置字符串格式。 / p>
答案 0 :(得分:1)
我可能会尝试不同的方式。听起来您使用相同的TextBox作为格式化值并编辑原始值。使用两个不同的TextBox进行查看和编辑,或将其打包在UserControl
中会更清晰。另外,我会使用两个属性,例如RawText
和FormattedText
,UserControl
将具有与两个属性绑定的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(至少对我而言) - 不是说没有挑战!)。