Я знаю, что, вероятно, уже слишком поздно, чтобы помочь ОП, но на тот случай, если кто-то еще наткнется на это ...
Решение, которое я бы использовал для решения реальной проблемы, заключающейся в том, что ОП, упомянутая в комментарии к другому ответу, заключается в использовании IValueConverter
.
Вот код для FormatConverter
класса:
public class FormatConverter : System.Windows.Data.IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string format = parameter.ToString();
return string.Format(format, value);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
А вот как вы его используете (взято из вопроса с модификацией):
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:YourNamespace">
<Page.Resources>
<x:Array x:Key="data" Type="{x:Type sys:String}">
<sys:String>Foo</sys:String>
<sys:String>Bar</sys:String>
<sys:String>Baz</sys:String>
</x:Array>
<local:FormatConverter x:Key="FormatConverter" />
</Page.Resources>
<StackPanel>
<ComboBox ItemsSource="{Binding Source={StaticResource data}}" ItemStringFormat="##{0}##"
Text="{Binding Path=VMProp, Mode=OneWayToSource, Converter={StaticResource FormatConverter}, ConverterParameter=##{0}##}" />
</StackPanel>
</Page>
Это приведет к тому, что элементы будут отображаться в ComboBox
как "## Foo ##", "## Bar ##" и "## Baz ##" благодаря установке ItemStringFormat
на "## {0} ##". Кроме того, свойству VMProp
в ViewModel будут присваиваться значения в том же формате, когда они выбраны, благодаря FormatConverter
с ConverterParameter
, установленным на "## {0} ##".
Обратите внимание, что хотя я использовал свойство ComboBox.Text
, чтобы сохранить соответствие первоначальному вопросу, я бы предположил, что свойство ComboBox.SelectedItem
будет более подходящим. ;)