【问题标题】:How can I change (i.e. toggle) the bound, StringFormat property of a WPF control?如何更改(即切换)WPF 控件的绑定 StringFormat 属性?
【发布时间】:2015-02-27 04:46:27
【问题描述】:

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

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

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

绑定使用后无法更改。

那么,在控件绑定到数据模型对象后,有没有一种直接的方法可以修改TextBox 的字符串格式?我愿意更改控件值的格式,但最终的愿望是在编辑数据时去除数据的格式,并在用户退出字段后重新设置字符串格式。

【问题讨论】:

  • 最近我也做过类似的事情。参考链接。 stackoverflow.com/questions/28643298/…
  • 大声笑,谢谢@Ganesh。这正是我需要的。如果在不创建新控件的情况下我无法找到一种方法来执行此操作,我将使用您的实现(并给 Ryan 答案标记,因为这是他的建议。)但是,我可能已经找到了一种方法来做到这一点样式和触发器...我需要试验和更新这个问题。

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


【解决方案1】:

我可能会尝试不同的方式。听起来您对格式化值使用相同的 TextBox 并编辑原始值。使用两个不同的文本框进行查看和编辑会更简洁,或者将其打包在UserControl 中。另外,我会使用两个属性,例如RawTextFormattedText 以及 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(至少对我来说 - 不是说不过没有挑战!)。

【讨论】:

  • 这可能是最好的答案,但是......我很难接受要更改值的格式,我必须为这样一个简单的任务覆盖控件。 PS:这是我的第一个 WPF 项目,自 .Net 1.0 以来我一直在编写 WinForms。我可能表现得像个被宠坏的孩子:P
  • 感谢您的更新,但不幸的是我在公司环境中。我有一个严格指定的设计文档,并且已经明确指定,并且是用户相当严格的要求。 C'est la vie。
  • 我了解需求文档。同样在这里。请记住,修改一个糟糕的需求总比一个糟糕的需求的糟糕实现要好。如果要求是单个控件,那么我会采用 UserControl 建议并使其正常工作。
猜你喜欢
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 2011-03-07
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
相关资源
最近更新 更多