🚀 Welcome to MDriven Learn –  MDriven is now on Discord!  Don’t miss the latest Release Notes.
Databound Placeholder text
(Replacing message template with parser tag)
No edit summary
 
(One intermediate revision by one other user not shown)
Line 3: Line 3:
[[File:Input control with placeholder.png|none|thumb]]
[[File:Input control with placeholder.png|none|thumb]]


The old way was a [[TaggedValues|taggedvalue]] "Placeholder" along with the desired text to show "Enter a search string..." - this is deprecated.
The old way was a [[Documentation:TaggedValues|taggedvalue]] "Placeholder" along with the desired text to show "Enter a search string..." - this is deprecated.


The new way is to name an additional column with postfix _Placeholder in its name. The result of the expression will be used as a placeholder text.
The new way is to name an additional column with postfix _Placeholder in its name. The result of the expression will be used as a placeholder text.
Line 38: Line 38:
</pre>
</pre>
[[Category:View Model]]
[[Category:View Model]]
{{Edited|July|12|2024}}
{{Edited|July|12|2025}}

Latest revision as of 05:59, 24 February 2025

This page was created by Hans.karlsen on 2022-10-14. Last edited by Stephanie on 2025-02-24.

Placeholder text is the text shown as a hint to the User while the control is empty. As soon as the User enters a value, the placeholder text is not shown.

Input control with placeholder.png

The old way was a taggedvalue "Placeholder" along with the desired text to show "Enter a search string..." - this is deprecated.

The new way is to name an additional column with postfix _Placeholder in its name. The result of the expression will be used as a placeholder text.

This has been available in Turnkey since early 2022.

In WPF, you need to add code, since the out-of-the-box controls of WPF do not support placeholder texts.

If you use the excellent MaterialDesign (MaterialDesignThemes by James Willock) package, this code will get the effect:

      _wecpof = new WECPOFTabBased();
      ...
      _wecpof.OnAddWindow += (s, e) =>
      {
        e.Win.ViewModelUC.OnViewModelColumnPlacementDone += (s2, e2) =>
        {
          if (e2.Ctrl is System.Windows.Controls.TextBox || e2.Ctrl is System.Windows.Controls.ComboBox || e2.Ctrl is System.Windows.Controls.DatePicker)
          {
            var val = e2.Vcol.TaggedValueLocalAndModelInfo("Placeholder");
            if (!string.IsNullOrEmpty(val))
              MaterialDesignThemes.Wpf.HintAssist.SetHint(e2.Ctrl, val);
            var dataForPlaceholder = e2.Vcol.ViewModelClass.ColumnFromName(e2.Vcol.RuntimeName + "_Placeholder");
            if (dataForPlaceholder != null)
            {
              if (e2.Ctrl is FrameworkElement)
              {
                var b = new System.Windows.Data.Binding(dataForPlaceholder.RuntimeName) { Source = e2.Vcol.ViewModelClass.BindingSource, Mode = System.Windows.Data.BindingMode.OneWay /*, Converter = new Eco.Xaml.PassthroughDebugConverter() */ };
                (e2.Ctrl as FrameworkElement).SetBinding(MaterialDesignThemes.Wpf.HintAssist.HintProperty, b);
              }
            }
          }
        };
MDriven Chat

How would you like to chat today?

Setting up your conversation…

This may take a few moments