[英]How can I change (i.e. toggle) the bound, StringFormat property of a WPF control?
我有一個WPF TextBox
,它的文本值綁定在XAML中。 這可以正常工作,並且按預期方式,將關聯值加載到該字段時,可以按需要對其進行格式化。
我的問題是,當用戶輸入文本字段來修改值時,我想刪除格式並顯示原始基礎值。
為此,我嘗試在GotFocus
事件中綁定的文本框上設置BindingExpression.ParentBinding.StringFormat
屬性。 但是,當我嘗試將StringFormat
屬性設置為空字符串時,出現以下異常:
使用綁定后將無法更改。
因此,在將控件綁定到數據模型對象之后,是否可以直接修改TextBox
的字符串格式? 我願意更改格式化控件值的方式,但最終的願望是在編輯數據時剝離數據的格式,並在用戶退出字段后重新設置字符串格式。
我可能會嘗試不同的方式。 聽起來您正在使用相同的TextBox作為格式化值並編輯原始值。 使用兩個不同的TextBox進行“查看”和“編輯”,或將其打包在UserControl
,會更清潔。 另外,我將使用兩個屬性,例如RawText
和FormattedText
,而UserControl
將具有DependencyProperties並綁定到這兩個屬性。 UserControl
將自動切換到Edit TextBox。 但是,“如何自動切換”的問題可能是一個挑戰。 您可能需要使用您提到的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(至少對我來說-並不是說沒有挑戰!)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.