How to replace strings in StringFormat in WPF Bind

2020-05-01 10:01发布

问题:

I need to replace a , with ,\n(New Line) in my string i want to do it on ClientSide in StringFormat

<TextBlock Grid.Row="0" Text="{Binding Address}" Grid.RowSpan="3" />

How can i do this?

回答1:

You can't do this via a StringFormat binding operation, as that doesn't support replacement, only composition of inputs.

You really have two options - expose a new property on your VM that has the replaced value, and bind to that, or use an IValueConverter to handle the replacement.

A value converter could look like:

public class AddNewlineConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string original = Convert.ToString(value);
        return original.Replace(",", ",\n");
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplemnentedException();
    }
}

You'd then use this in your binding. You could add a resource:

<Window.Resources>
    <local:AddNewlineConverter x:Key="addNewLineConv" />
</Window.Resources>

In your binding, you'd change this to:

<TextBlock Grid.Row="0" 
      Text="{Binding Path=Address, Converter={StaticResource addNewLineConv}}"
      Grid.RowSpan="3" />