Jednoduchý string.Format v XAMLu


Pokud chcete v Metru, resp. přímo v XAMLu použít metodu string.Format a stačí vám pouze jeden parametr, tak jedna z možností, která je zároveň velmi jednoduchá, je použít (jednosměrný) IValueConverter se dvěma property pro “předponu” a “příponu”… Výsledný tvar pak bude “{předpona}{hodnota}{přípona}”.


public class StringFormatConverter : IValueConverter
{
  public string Prefix { get; set; }
  public string Suffix { get; set; }


  public object Convert(object value, Type targetType, object parameter, string language)
  {
    if (value == null)
      return null;
    if (string.IsNullOrWhiteSpace(Prefix) && string.IsNullOrWhiteSpace(Suffix))
      return value;
    return string.Format("{0}{1}{2}", Prefix, value, Suffix);
  }

  public object ConvertBack(object value, Type targetType, object parameter, string language)
  {
    throw new NotImplementedException("String Format Convert Back");
  }
}

Kód samotného converteru je zde sice pro Metro aplikaci v C#, ale není problém např. v případě WPF prohodit typ posledního parametru za “CultureInfo” a jinak použít úplně stejně…


<ComboBox ItemsSource="{Binding Properties}"
          DisplayMemberPath="Value" SelectedValuePath="Key"
          SelectedValue="{Binding Key, Converter={StaticResource r_StringFormatConverter}}">
  <ComboBox.Resources>
    <Converters:StringFormatConverter x:Key="r_StringFormatConverter" Prefix="by " />
  </ComboBox.Resources>
</ComboBox>

Konkrétní využití je např. v ComboBoxu pro bindování názvu vybrané property (což zde představuje klíč – Key), ale ve tvaru “by {key}”.

Pro každou instanci definovanou někde v Resources v XAMLu je předpona a přípona stejná, takže v případě více použití je vždy nutné vytvořit novou instanci converteru s novými hodnotami.

Pozn.: Ve WPF je samozřejmě možné použít StringFormat v rámci Bindingu…

, , , , , ,

Komentáře jsou uzavřeny.